数据类型描述使用以下约定:
- 对于整数类型,M表示最大显示宽度。对于浮点和定点类型, M是可以存储的总位数(精度)。对于字符串类型, M是最大长度。
- D适用于浮点和定点类型,并指示小数点后的位数(小数位数)。可能的最大值是30,但不应大于 M-2。
- fsp适用于 TIME, DATETIME和 TIMESTAMP类型和表示小数精度秒; 也就是说,小数点后的位数是秒的小数部分。fsp如果给出值,则该值必须在0到6的范围内。值0表示没有小数部分。如果省略,则默认精度为0。(这与标准SQL默认值6不同,以便与以前的MySQL版本兼容。)
- 方括号([和])表示类型定义的可选部分。
一、数据类型介绍
1.1、数值数据类型
(1)、整数类型(精确值)
数值型数据主要用来存数字。整数类型的属性字段可以添加AUTO_INCREMENT自增约束条件。
类型名称 | 储存空间(位元组) | 取值范围 |
---|---|---|
TINYINT | 1个字节。 | 0-255(2^8-1) |
SMALLINT | 2个字节 | 0-65535 |
MEDIUMINT | 3个字节 | 0-16777215 |
INT(INTEGER) | 4个字节。 | 0-4294967295 |
BIGINT(大整数) | 8个字节。 | 0-18446744073709551615(2^64-1) |
18446744073709551616
INT(11)中11表示的是该数据类型指定的显示宽度,数值的位数小于指定的宽度时,会由空格填充,如果插入大于显示宽度,只要该值不超过该类型整数的取值范围,数值依然可以插入而且能够显示出来。
(2)、定点数类型(精确值)
DECIMAL(M,N)。
浮点类型和定点类型都可以用(M,N)来表示,其中M称为精度,表示总共的位数;N称为标度,是表示最小数的位数。
salary DECIMAL(5,2)
5是精度, 2是小数位数。精度表示值存储的有效位数,小数位数表示小数点后可以存储的位数。标准SQL要求DECIMAL(5,2)能够存储具有五位数字和两位小数的任何值,因此可以存储在salary 列中的值的范围是从-999.99到 999.99。
(3)、浮点数类型
-
- 浮点数分为两种:
在MySQL中,定点数以字符串形式存储,在对精度要求比较高的时候(如货币,科学数据等)使用DECIMAL的类型比较好。另外两个浮点数进行减法和比较运算时也容易出问题,所以在使用浮点型时要注意。
1.2、日期与时间类型
- YEAR
YEAR存储时只需要一个字节 - 以4位字符串或者4位数字格式表示YEAR 范围为 1901~2155。
- 以2位字符串表示 "00"~"69" 代表2000~2069 "70"~"99"代表1970~1999
CREATE TABLE year_test(yt YEAR); INSERT INTO year_test VALUES(1925); INSERT INTO year_test VALUES(33); INSERT INTO year_test VALUES(88); SELECT * FROM year_test;
- TIME
-- 建表 CREATE TABLE timetest(t time); -- 插入数据 insert into timetest VALUES('10:05:05'),('23:23'),('2 10:10'),('3 02'),('10'); -- 查询 SELECT * FROM timetest
- DATE
--格式: --字符串类型 “”、“”、“”、“” -- 数字类型YY-MM-DD 或者YYMMDD CREATE TABLE datetest(datatest DATE); INSERT INTO datetest VALUES('2019-08-12'),('20190812'),('190812'),(CURRENT_DATE),(NOW()); SELECT * FROM datetest
- DATETIME
DATETIME类型用在需要同时包含日期和时间信息的值,存储时需要8个字节,格式“YYYY-MM-DD HH:MM:SS“,在给DATETIME类型的字段赋值时,可以使用字符串类型或者数字类型的数据插入。
MySQL允许“不严格”语法。任何标点符号都可以用作日期部分或者时间部分之间的间隔符。
-
TIMESTAMP
1.3、文本字符串类型
MySQL中支持两类字符串数据:文本字符串、二进制字符串。 MySQl中文本字符串有:CHAR、VARCHAR、TEXT、ENUM、SET。VARCHAR和TEXT类型是变长类型,对于其存储需求取决于列值的实际长度,而不是取决于类型的最大可能尺寸。
- CHAR和VARCHAR
- CHAR(M)为固定长度字符串,在定义时指定字符串列长。当保存时在右侧填充空格以达到指定的长度。M(0-255)表示类长度。当检索CHAR值时,尾部的空格被删除。
CREATE TABLE char_test(charColumn CHAR(4)); INSERT INTO char_test VALUES('abcde');
-
TEXT类型
保存如文章内容,评论等。当保存或查询时,不删除尾部空格。
-- 语法:字段名 ENUM ('值1','值2','值3'......) create table enum_test(e enum('1','2','3'));
- SET类型
SET是一个字符串对象,可以有零个或多个值,最多可以有64个成员。
-- 语法:字段名 SET('值1','值2','值3'.....'值n') create table set_test(st set('1','2','3'));
ENUM | SET | |
---|---|---|
相同 | 内部用整数表示,列表中每一个值有一个索引编号。当创建表时,SET成员值的尾部空格将会自动删除 |
|
不同 | ENUM类型字段只能从定的列中选择一个值插入 | SET类型的列可以从定义的列值中选择多个字符,如果插入SET字段中的列值重复, 则MySQL自动删除重复的值,插入SET字段值的顺序并并不重要, MySQL会在存入数据时,按照定义的顺序显示。 |
1.4、二进制字符串类型
- BIT类型
BIT类型是位字段类型。M表示每个值的位数,范围为1~64如果M省略,默认为1.如果为BIT(M)列分配的值的长度小于M位,在值的左边用0填充。 - BINARY和VARBINARY类型
-- 列名称 BINNARY(M)或者 VARBINARY(M) BINNARY 长度固定,不足长度右边用 补齐 VARBINARY长度可变
- BLOB
是一个二进制大对象,用来存储可变量的数据。
二、如何选择数据类型
2.1、CHAR 和VARCHAR之间的选择
-
-
存储引擎对CHAR和VARCAHR的影响
对于MyISAM存储引擎:最好使用固定长度的数据列代替可变长度的数据列。这样可以是整个表静态化,从而使数据检索更快,用空间换时间。
2.2、ENUM 和SET
2.3、BLOB和TEXT
都是存储大容量信息的。BLOB主要存储图片、音频文件。TEXT只能存储纯文本
三、比较运算符
-
等于运算符 等号用来判断数字、字符串、和表达式是否相等。相等返回1 不等返回0;比较字符串 不区分大小 写,不能用空值NULL的判断。
-
完全等于<=> 比等于加个判空处理,两边都为空则返回1,否则0。
-
不等于 != 后者<> 用来判断数字、字符串、和表达式是否不相等,相等返回0 不等返回1
-
IS NUll和IS NOT NULL 检验值是否为空
-
BETWEEN..AND...
-
LEAST语法 LEAST(值1,值2,......,值n);返回最小值。
-
GREATEST(值1,值2,.....);返回最大值。
-
IN 、NOT IN
-
LIKE
-
REGEXP用来匹配字符串 expr REGEXP 匹配条件 通配符
-
‘^’ 匹配以该字符后面字符开头的字符串、
-
‘$’ 匹配以该字符后面的字符结尾的字符串。
-
’.’匹配任意单个字符
-
‘[...]’ 匹配在方括号内的任意字符。[abc] 匹配a,b,c[a-z]匹配任一字母,[0-9]匹 配任意数字
-
’’匹配零个多多个在他前面的字符。例如X,匹配人一多个X.[0-9]*,匹配任意多个数字。
-
在MySQL中需要输入特殊符号如单引号、双引号、或者反斜线时注意使用转义字符