一、数据类型
MySQL支持多种数据类型,主要有数值类型、日期时间类型、字符串类型、二进制类型。
数据类型 | 明细 |
---|---|
数值类型 | tinyINT、smallINT、mediumINT、INT、bigINT、FLOAT、DOUBLE |
日期时间类型 | YEAR、TIME、DATE、DATETIME、TIMESTAMP |
字符串类型 | CHAR、VARCHAR、binary、VARbinary、TEXT、ENUM、SET |
二进制类型 | BIT、binary、VARbinary、tinyBLOB、BLOB、mediumBLOB、longBLOB |
(一)数值类型
1. 整数类型
MySQL支持在类型关键字后面的括号内指定整数值的显示宽度,可使用INT(M)进行设置。如果插入了大于显示宽度的值,只要该值不超过该类型整数的取值范围,数据依然可以插入。
2. 浮点数类型
浮点类型可以使用(M, D)来表示。其中M代表精度,即总位数;D代表标度,即小数的位数。
3. 定点数类型
定点数类型可以使用(M, D)来表示。其中M代表精度,即总位数,默认值为10;D代表标度,即小数的位数,默认值为0。
定点数类型实际上是以字符串存储的,其有效取值范围由M和D的值决定。存储空间也不是固定的,而是由M决定的,占用M+2个字节。
(二)日期时间类型
1. DATE类型
仅存储日期而不存储时间,默认格式为‘YYYY-MM-DD’。
可使用current_date()或now()插入当年计算机系统的日期。
2. TIME类型
记录时间,默认格式为'HH:MM:SS'。
3. YEAR类型
使用单字节表示年份。
4. DATETIME类型
DATETIME默认格式为‘YYYY-MM-DD HH:MM:SS’,包含日期和时间信息,存储占用8字节。
在给DATET/ME类型的字段赋值时,可以使用字符串类型或值类型的数据,只需要符合DATETIME的日期格式即可。
当DATETIME存储日期数据时,按实际输入的格式存储,即输入什么就存储什么,与时区无关。
5. TIMESTAMP类型
TIMESTAMP默认格式为‘YYYY-MM-DD HH:MM:SS’,显示宽度固定为19个字符,包含日期和时间信息,存储占用4字节。
当TIMESTAMP存储日期数据时,其值以UTC(世界标准时间)格式保存,存储时对当前时区进行转换,检索是再转换回当前时区。所以,当进行查询时,根据读者所在时区不同,其显示的日期时间不同。
(三)字符串类型
1. CHAR和VARCHAR类型
CHAR(M) 为固定长度字符串,保存时在右侧填充空格以达到指定长度,M的取值范围是0~255。当检索时,尾部的空格将被删掉。
VARCHAR(M) 为变长字符串,M的取值范围是0~65535。其占用空间为字符串长度+1字节以记录字符串长度,其实际存储的字符串为原字符串+一个字符串结束字符。在保存和检索时,尾部的空格仍保留。
2. TEXT类型
TEXT 字段保存非二进制字符串,在保存和查询值时,不删除尾部空格。TEXT类型分为4种:tinytext、text、mediumtext、longtext。
3. ENUM类型
ENUM 是一个字符串对象,其值为表创建时在字段规定中枚举的一列值,最多为65535个。
语法格式:字段 ENUM ('值1', '值2', '值3'...)
字段取值时,只能在指定的枚举列表中取,而且一次只能取一个值。如果创建的成员中有空格,其尾部的空格将自动被删除。
ENUM值依照索引顺序排列,并且空字符串排在非空字符串之前,NULL值排在其他所有枚举值之前。
4. SET类型
SET 类型是一个字符串对象,可以有零个或多个值,最多为64个。
语法格式:SET('值1', '值2', '值3'...)
字段取值时,只能在指定的枚举列表中取,一次可能取多个值。如果创建的成员中有空格,其尾部的空格将自动被删除。
若插入SET字段有重复,则MySQL自动将其删除,且按照定义顺序显示。
(四)复合类型
ENUM --- 单选按钮
SET --- 复选框
(五)二进制类型
字符串类型的数据按字符为单位进行存储,因此存在多种字符集、多种字符序;除了bit数据类型按位为单位进行存储;其他二进制类型的数据按字节为单位进行存储,仅存在二进制字符集binary。
TEXT和BLOB都可以粗野拿出长字符串,TEXT主要存储文本字符串(如新闻内容、博客日志等),BLOB主要存储二进制数据(如图片、音频、视频等)。
BLOB类型 | 可存储大小 |
---|---|
TinyBlob | 255B |
Blob | 65KB |
MediumBlob | 16MB |
LongBlob | 4GB |
二、运算符
(一)算术运算符
(二)比较运算符
MySQL中可以使用下面比较运算符比较数字、字符串、表达式,结果为真时返回1,为假时返回0,不确定时返回NULL。
1. 比较规则
- 数字作为浮点数比较,字符串以不区分大小写进行比较。
- 比较的参数中,若存在NULL,则返回NULL。
- 两个数字比较,按照整数进行比较。
- 两个字符串进行比较,按照字符串形式进行比较。
- 一个字符串和一个数字进行比较,则将字符串转换为数字后进行比较。
2. REGEXP运算符匹配字符串
语法格式:expr REGEXP 匹配条件
返回类型:满足匹配返回1;不满足返回0;若expr或匹配条件中有任一为NULL,则返回NULL。
(三)逻辑运算符
逻辑运算符的运算结果为TRUE(1)、FALSE(0)、NULL。
1. NOT、!
- !0 = 1
- !1 = 0
- !NULL = NULL
2. AND、&&
- 1&&1 = 1
- [1、0]&&0 = 0
- *&&NULL = NULL
其中的*
可为0或NULL。
3. OR、||
- [1、0]||[0、1] = 1
- 0||0 = 0
- 1||NULL = 1
- *||NULL = NULL
其中的*
可为0或NULL。
4. XOR
- 0 XOR 1 = 1
*
XOR NULL = NULL
其中的*
可为1或0或NULL。
(四)位运算符
位运算符是对二进制数字进行运算的。
1. 按位或|
- 0|0 = 0
- else = 1
2. 按位与&
- 1|1 = 1
- else = 0
3. 按位异或^
- 1|0 = 1
- else = 0
4. 按位左移<<
左边高位数值被丢弃,右边补0。a<<n
相当于a*(2^n)。
5. 按位右移>>
右边低位数值被丢弃,右边补0。a<<n
相当于a/(2^n)。
6. 按位取反~
- ~1 = 0
- ~0 = 1