mysql(二)数据类型

MySQL 字段的常用数据类型

整数型:TINYINT(tinyint),SMALLINT(smallint),INT(int),BIGINT(bigint)

浮点型:FLOAT(float),DOUBLE(double),DECIMAL(M,D)( decimal(m,d) )

字符型:CHAR(char),VARCHAR(varchar)

备注型:TINYTEXT(tinytext),TEXT(text),LONGTEXT(longtext)

日期型:DATETIME(datetime),DATE(date),TIMESTAMP(timestamp)

1、整数型

column0 column1 column2 column3 column4
类型 所占字节 最小值 最大值 最大长度
(带符号的 / 无符号的) (带符号的 / 无符号的)
TINYINT (tinyint) 1 -128 127
0 255
SMALLINT (smallint) 2 -32768 32767
0 65535
MEDIUMINT (mdeiumint) 3 -8388608 8388607
0 16777215
INT (int) 4 -2147483648 2147483647
0 4294967295
BIGINT (bigint) 8 -9223372036854775808 9223372036854775807
0 18446744073709551615
1. TINYINT 最大长度 4
2. SMALLINT 最大长度 6
3. MEDIUMINT 最大长度 8
4. int 最大长度是 11 位:
    如果在建表时不指定字段 int 类型的长度时,系统则默认生成长度为 11 的字段。11 也是 int 类型的最大长度,其中第一位表示符号+或者-,后面十位表示数字
5. BIGINT 最大长度 20:
    注意:int(M) 在 integer 数据类型中,M 表示最大显示宽度。在 int(M) 中,M 的值跟 int(M) 所占多少存储空间并无任何关系。和数字位数也无关系 int(3)、int(4)、int(8) 在磁盘上都是 占用 4 btyes 的存储空间。 int(11),tinyint(1),bigint(20),后面的数字,不代表占用空间容量。而代表最小显示位数。 这个东西基本没有意义,除非你对字段指定 zerofill。 所以我们在设计 mysql 数据库时,建表时,mysql 会自动分配长度:int(11)、tinyint(4)、 smallint(6)、mediumint(9)、bigint(20)。 所以,就用这些默认的显示长度就可以了。不用再去自己填长度,比如搞个 int(10)、tinyint(1) 之类的,基本没用。而且导致表的字段类型多样化。

2、浮点型

column0 column1 column2 column3
类型 字节 最小值 最大值
FLOAT (float) 4 +-1.175494351E-38 +-3.402823466E+38
DOUBLE (double) 8 +-2.2250738585072014E-308 +-1.7976931348623157E+308
DECIMAL (decimal) 可变 它的取值范围可变。
FLOAT 和 DOUBLE 在不指定精度时,默认会按照实际的精度(由计算机硬件和操作系统决 定),DECIMAL 如果不指定精度,默认为(10,0)。 
浮点数相对于定点数的优点是在长度一定的情况下,浮点数能够表示更大的范围;缺点是会 引起精度问题。

3、字符串型

column0 column1 column2 column3 column4
CHAR(4) 存储需求 VARCHAR(4) 存储需求
'' ' ' 4个字节 '' 1 个字节
'ab' 'ab ' 4个字节 'ab ' 3 个字节
'abcd' 'abcd' 4 个字节 'abcd' 5 个字节
'abcdefgh' 'abcd' 4 个字节 'abcd' 5 个字节
varchar 使用额外的 1-2 字节内来存储值长度,列长度<=255 使用 1 字节保存,其它情况使 用 2 字节保存。例如 varchar(10)会占用 11 字节存储空容间,varchar(500)会占用 502 字节存 储空间。 

varchar 最大长度可以是多少?

根据字符集,字符类型若为 gbk,每个汉子占用 2 个字节,最大长度不能超过 65535/2 =32766; 字符类型若为 utf8,每个汉子最多占用 3 个字节,最大长度不能超过 65535/3 =21845,若 超过这个限制,则会自动将 varchar 类型转为 mediumtext 或 longtext,

5、日期型(实际项目很少用)

column0 column1
列类型 零值
DATETIME(datetime) '0000-00-00 00:00:00'
DATE(date) '0000-00-00'
TIMESTAMP (timestamp) 00000000000000
TIME(time) '00:00:00'
YEAR (year) 0000
实际项目中我们存储日期用的都是 int 类型的时间戳

Mysql 查询语句详解

创建一个 school 的数据库
create database school;
创建一个 class 表里面有 id、name、email、score 字段

CREATE TABLE class ( 
   `id` int(11) NOT NULL AUTO_INCREMENT, 
   `name` varchar(255), 
   `email` varchar(255), 
   `score` tinyint(4), 
   PRIMARY KEY (`id`) 
)
PRIMARY KEY (`id`)  //表示 id 为主键,让 id 值唯一,不得重复。自增;

2 给这个班级表 class 新增 5-10 条学员记录

  • 查看班级所有字段的记录以及查看班级 id,name 的记录
    select * from class;
    select id,name from class;

WHERE 表达式的常用运算符

MYSQL运算符 含义
= 等于
< 小于
> 大于
<= 小于或等于
>= 大于或等于
!= 不等于
IS NOT NULL (is not null) 具有一个值
IS NULL (is null) 没有值
BETWEEN (between) 在范围内
NOT BETWEEN (not between) 不在范围内
IN (in) 指定的范围
OR (or) 两个条件语句之一为真
AND (add) 两个条件语句都为真
NOT (not) 条件语句不为真
LIKE (like) 搜索列中的指定模式
查找 emial 不为空的数据 (空字符串和这个空不一样)
select * from class where email is not null ;

查找 emial 为空的数据
select * from class where email is null or email="";


查找成绩大于等于 70 小于等于 90 的数据
select * from class where score>=70 AND score<=99; 
select * from class where score between 70 and 99; 
select * from class where score not between 70 and 99;

查找 score 为 89 和 98 的数据
select * from class where score in (89,98);

查找 score 不是 89 和 98 的数据
select * from class where score not in (89,98);

Or 
select * from class where score=87 or score=88; 

And
select * from class where score>=70 AND score<=99;

like 模糊查询
select * from class where email like "%qq%";    // 包含qq的
select * from class where email like "ja%";     // ja 开头的 
select * from class where email like "%163.com"; //163.com 结尾的 
select * from class where email not like "%163.com"; //不是 163.com 结尾的



Mysql 分组函数

函数 用法 描述
AVG() AVG(column) 返回列的平均值
COUNT() COUNT(column) 统计行数
MAX() MAX(column) 求列中的最大值
MIN() MIN(column) 求列中的最小值
SUM() SUM(column) 求列中的和
统计班级的平均分
select avg(score) from class;

统计班级一共多少人
select count(1) from class;

找出这个班成绩最高的学生 (将一个查询语句的结果作为另一个查询语句的条件,会先执行 in里面的语句)
select max(score) from class;
select * from class where score in (select max(score) from class);

找出这个班成绩最低的学生
select min(score) from class;
select * from class where score in (select min(score) from class);

统计这个班的总分
select sum(score) from class;

Mysql 别名

设置一个列显示出来的别名
select name as a from class;

原文地址:https://www.cnblogs.com/kgwei520blog/p/13782992.html