数据类型和运算符
1 基本数据类型的分类
1.1整型和浮点类型、定点类型
1、整型
TINY 1 字节
SMALLTINY 2 字节
MEDIUMTINY 3 字节
INT 4 字节
BIGINT 8 字节
INT(4),4表示显示宽度,跟数据类型的实际取值宽度无关,只是显示的宽度。
如果不写的话,会默认一个能显示有符号数的最小显示范围,如TINY最小-128,会默认显示4位。
2、浮点数类型和定点数类型
浮点数:FLOAT(4字节)、DOUBLE(8字节)
定点数:DECIMAL(M+2)字节
浮点数和定点数都可以用(M,N)来表示,其中M称为精度,表示总共的位数;N为标度,表示小数的位数。
如果用户指定的精度超出精度范围,就会四舍五入处理,并报warning
在对精度要求比较高时(如货币、科学数据等)使用定点类型较好。
1.2 日期和时间类型
类型名称 | 日期格式 | 日期范围 | 存储需求 |
---|---|---|---|
YEAR | YYYY | 1901~2155 | 1字节 |
TIME | HH:MM:SS | -838:59:59 | 3字节 |
DATE | YYYY--MM--DD | 1000-01-01~9999-12-31 | 3字节 |
DATETIME | YYYY-MM-DD HH:MM:SS | 1000-01-01 00:00:00~9999-12-31 23:59:59 | 8字节 |
TIMESTAMP | YYYY-MM-DD HH:MM:SS | 1970-01-01 00:00::01 UTC~ 2038-01-19 11:14:07 UTC | 4字节 |
1、YEAR
1)其输入格式为'YYYY'或者 YYYY
2)若以两位字符串格式插入的话,范围为"00"到"99"."00"到"69"会被自动转换为2000到2069.
"70"到"99"会被转换为"1970"到"1999"."0"和"00"具有相同的效果。超过这个范围会被转换为2000.
3)若以两位数字表示的YEAR,范围 1~99,与字符串不同的是,0被转换为0000,而不是2000.
4)存入数字 0,不会报错。存入超过1901~2155的数会报错。
2、TIME
1)TIME类型不仅可以表示一天的时间,还可以表示两个时间点的时间间隔,因此
小时部分的范围为-838~838.
2)'D HH:MM:SS', 'HH:MM','D HH:MM','D HH','SS',D表示日,取值范围
0~34,在插入数据库时,被转换为小时保存。格式为"D*24+HH",注意HH要写成双位数。
3)'HHMMSS'或者HHMMSS格式可以自动理解,1112理解为00:11:12, 11:12理解
为11:12:00,另外,不合法的会被理解为00:00:00
4)系统当前时间的字段: CURRENT_TIME,NOW()
3、DATE
1)'YYYY-MM-DD','YYYYMMDD'
2)'YY-MM-DD','YYMMDD',自动理解YY
3)YY-MM-DD,YYMMDD
4)CURRENT_DATE,NOW()
5)允许不严格的语法,比如98.11.31,只要在数字之间加间隔符都能识别。
4、DATETIME
1)"YYYY-MM-DD HH:MM:SS","YYYYMMDDHHMMSS"
2)"YY-MM-DD HH:MM:SS","YYMMDDHHMMSS"
3)YYYYMMDDHHMMSS,YYMMDDHHMMSS
5、TIMESTAMP
1)显示格式与DATETIME相同,但是4个字节范围比DATETIME8字节范围小。
2)UTC世界标准时间,它会自动转换时区。
1.3字符串类型
类型名称 | 说明 | 存储需求 |
---|---|---|
CHAR(M) | 固定长度非二进制字符串 | M字节,1<=M<=255 |
VARCHAR(M) | 变长非二进制 | L+1字节,L<=M,1<=M<=65535 |
TINYTEXT | L+1字节,L<2^8 | |
TEXT | L+2字节,L<2^16 | |
MEDIUMTEXT | L+3字节, L<2^24 | |
LONGTEXT | L+4字节,L<2^32 | |
ENUM | 枚举类型,只能有一个枚举字符串值 | 1或两个字节,取决于枚举值的数目(最大65535) |
SET | 字符串对象,可以有0个或多个SET成员 | 1、2、3、4或8个字节,取决于集合策划那个元的数量(最多64) |
1、CHAR和VARCHAR类型
1)CHAR(M)为固定长度字符串,在定义时要指定字符串列长。会把字符串尾部的空格截断。
2)VARCHAR的最大实际长度由最长的行的大小和使用的字符集确定,而其实际占用的空间范围为字符串实际长度加1或者2,非空时需要1字节来标记,当长度小于255个字节时使用1字节标记字段长度,当长度超过255字节时,使用2字节来标记字段长度。
2、TEXT类型
当保存或查询TEXT的值时,不删除尾部空格。
3、ENUM类型
ENUM是一个字符串对象,其值为创建表时在列规定中枚举的一列值。语法格式:
字段名 ENUM('值1','值2',...'值n')
如果创建的成员中有空格,则其尾部的空格会被自动删除。
ENUM值按照列索引顺序排列,并且空字符串''排在非空字符串之前,默认存在NULL值。
ENUM总有一个默认值,如果将ENUM声明为NULL,则NULL为该列的一个有效值,如果声明为非NULL,默认值为第一个元素。
4、SET类型
列可以从定义的列值中选择多个字符联合插入,如果有重复的值,则自动删除重复的值。
1.4二进制类型
MySQL支持两类字符型数据:文本字符串和二进制字符串
二进制字符串类型包括BIT,BINARY,VARBINARY,TINYBLOB,MEDIUMBLOB,LONGBLOB
BLOG 是二进制字符串,TEXT是非二进制字符串,两者均可存放大容量的信息。BLOB主要存储图片,
音频信息等,而TEXT只能存储纯文本文件。
2 常见运算符
主要总结比较运算符
1、 IS NULL, IS NOT NULL运算符
2、between and 运算符
3、least 运算符
4、greatest 运算符 取最大
5、IN,NOT IN() 运算符,判断是否在in的列表中
6、LIKE 运算符 expr like 匹配条件
% 匹配多个字符
_ 匹配一个字符
7、regexp 运算符 expr regexp 匹配条件
'^' 以这个字符后面的字符开头的字符串
'$' 以这个字符前面的字符结尾的字符串
'.' 匹配任意一个单字符
'[...]' 匹配方括号里的任意字符
'*' 匹配零个多个在他前面的字符,如 'x*'