本文地址:https://www.jianshu.com/p/449d7b974a35
一、运算符
MySQL中主要有四种运算符,分别是:
- 算术运算符
- 比较运算符
- 逻辑运算符
- 位运算符
算术运算符
算术运算符 | + |
- |
* |
/ |
% |
---|---|---|---|---|---|
作用 | 加 | 减 | 乘 | 除 | 取余 |
比较运算符
比较运算符 | 作用 | 示例 |
---|---|---|
= |
等于 | Id=5 |
> |
大于 | Id>5 |
< |
小于 | Id<5 |
>= |
大于等于 | Id>=5 |
<= |
小于等于 | Id<=5 |
!= 或<>
|
不等于 | Id!=5 |
IS NULL |
为NULL
|
Id IS NULL |
IS NOT NULL |
不为NULL
|
Id IS NOT NULL |
BETWEEN AND |
在...范围之间 | Id BETWEEN 10 AND 15 |
IN |
在...列表中 | Id IN (3,4,5) |
NOT IN |
不在...列表中 | Id NOT IN (3,4,5) |
LIKE |
模式匹配 | Name LIKE 'brow_' |
NOT LIKE |
模式匹配 | Name NOT LIKE 'brow_' |
REGEXP |
正则表达式匹配 | Name REGEXP '^bro' |
逻辑运算符
逻辑运算符 |
&& 或AND
|
! 或NOT
|
|| 或OR
|
XOR |
---|---|---|---|---|
作用 | 与 | 非 | 或 | 异或 |
位运算符
位运算符 | & |
| |
~ |
^ |
<< |
>> |
---|---|---|---|---|---|---|
作用 | 按位与 | 按位或 | 按位取反 | 按位异或 | 按位左移 | 按位右移 |
二、数据类型
在建表之前,我们首先要弄清楚MySQL的数据类型,在MySQL中,任何数据都有自己的数据类型。
每一张数据表中都有一个或多个字段,而每个字段都有一个特定的数据类型。 MySQL主要提供了大致三大类数据类型:数值类型,字符类型和日期类型。MySQL中的每种数据都可以通过以下特征来确定类型:
- 用来表示的数据值
- 占用的空间以及值是固定长度还是可变长度
- 数据类型的值是否可以被索引
- MySQL如何比较特定数据类型的值
字符类型
CHAR和VARCHAR
CHAR
和VARCHAR
类型是字符类型中使用的主力,两者的差别主要体现在存储和检索的方式,存储的最大长度以及是否在右方补齐空格。在声明字段时,都可以使用CHAR(M)
和VARCHAR(M)
来指定存储的最大字符长度。
CHAR
能够存储的字符长度范围为0-255,且存储的长度在指定之后为固定值,占用存储空间也会固定。如下方列表所示,在存储的值没有达到指定值时,会在字符串右方补齐空格,而在检索的时候,右方补齐的空格会被删掉。
而VARCHAR
能存储的字符长度范围为0-65535,VARCHAR
与CHAR
最大的区别就是VARCHAR
存储的字符长度是可变的,存储的空间大小也相对应是可变的。原理是当字符长度在0-255范围时,VARCHAR
会使用一个字节来记录字符的长度,当长度超过255时,VARCHAR
会使用两个字节来记录字符的长度。
存储的值 | CHAR(4) |
占用存储空间 | VARCHAR(4) |
占用存储空间 |
---|---|---|---|---|
'' |
' ' |
4 bytes | '' |
1 byte |
'ab' |
'ab ' |
4 bytes | 'ab' |
3 bytes |
'abcd' |
'abcd' |
4 bytes | 'abcd' |
5 bytes |
'abcdefgh' |
'abcd' |
4 bytes | 'abcd' |
5 bytes |
在具体的使用场景中,如果字段的长度是固定的话,那么使用CHAR
占用的空间更少,而如果字段的长度是不固定的话,那么VARCHAR
会更省空间。
BLOB和TEXT
BLOB
表示的是二进制字符串(byte strings),TEXT
表示的则是非二进制字符串,也就是普通的字符串。BLOB
和TEXT
都分别有四个类型,类型间的区别只是长度的区别。
L表示插入的字符串实际占用的字节大小。
数据类型 | 占用存储空间 |
---|---|
TINYBLOB ,TINYTEXT
|
当L < 2的8次方,需要L + 1字节 |
BLOB ,TEXT
|
当L < 2的16次方,需要L + 2字节 |
MEDIUMBLOB ,MEDIUMTEXT
|
当L < 2的24次方,需要L + 3字节 |
LONGBLOB ,LONGTEXT
|
当L < 2的32次方,需要L + 4字节 |
大多数情况下,TEXT
和VARCHAR
基本可以等同,它们的区别主要有两个方面:
-
BLOB
和TEXT
不能设置默认值。 - 对
BLOB
和TEXT
的索引,必须指定索引长度。
ENUM
枚举类型,声明枚举类型的字段可以指定一个由字符串组成的列表,则之后插入的值只能在指定的字符串中选择。
数值类型
在MySQL中,你可以找到所有SQL标准数字类型,包括精确数字数据类型和近似数字数据类型,包括整数,定点和浮点数。 此外,MySQL还具有用于存储位值的BIT数据类型。数字类型可以是有符号或无符号,但BIT
类型除外。
整形
MySQL中不同类型的整形,能储存的最大数字范围不同,占用存储空间的大小也不同。同样的,如果需要表示负值,跟不表示负值,能表示的数值范围也不同。
类型 | 存储大小(字节) | 有符号最小值 | 无符号最小值 | 无符号最大值 | 无符号最大值 |
---|---|---|---|---|---|
TINYINT |
1 | -128 |
0 |
127 |
255 |
SMALLINT |
2 | -32768 |
0 |
32767 |
65535 |
MEDIUMINT |
3 | -8388608 |
0 |
8388607 |
16777215 |
INT |
4 | -2147483648 |
0 |
2147483647 |
4294967295 |
BIGINT |
8 |
-2 的63次方 |
0 |
2 的63次方-1 |
2 的64次方-1 |
浮点型
浮点型数值类型主要两种,FlOAT
和DOUBLE
类型,分别表示单精度和双精度数值。由于计算机无法精确表示无限小数,所以这也被成为近似数值类型。
FLOAT
类型可以表示精度在0-23范围内的单精度数值,存储时占四个字节大小。
DOUBLE
类型可以表示精度在24-53范围内的双精度数值,存储时占八个字节大小。
浮点型数据可以使用一种非标准的语法来指定数据的精度,例如FLOAT(M,D)
,DOUBLE(M,D)
。在这里M
值指的是整个数字的最大位数,N
值指的是小数部分的最大位数,如FLOAT(7,4)
能表示的最大数值是999.9999。同时,MySQL采用四舍五入,如果把999.00009插入到FLOAT(7,4)
中,那么最终保存的结果是999.0001。
定点型
由于有一些应用场景需要精确的数字,所以就有了DECIMAL
类型,主要用来表示精确小数。
DECIMAL
同样能使用跟浮点数一样的语法来指定数据的精度,如DECIMAL(M,D)
。需要注意的是DECIMAL
最大能表示的位数为65,但是DECIMAL
默认的限制位数为DECIMAL(10,0)
,所以如果要表示更大的位数,需要自行指定。
日期类型
数据类型 | 描述 |
---|---|
DATE() | 日期。格式:YYYY-MM-DD注释:支持的范围是从 '1000-01-01' 到 '9999-12-31' |
DATETIME() | 日期和时间的组合。格式:YYYY-MM-DD HH:MM:SS注释:*支持的范围是从 '1000-01-01 00:00:00' 到 '9999-12-31 23:59:59' |
TIMESTAMP() | 时间戳。TIMESTAMP 值使用 Unix 纪元('1970-01-01 00:00:00' UTC) 至今的秒数来存储。格式:YYYY-MM-DD HH:MM:SS注释:*支持的范围是从 '1970-01-01 00:00:01' UTC 到 '2038-01-09 03:14:07' UTC |
TIME() | 时间。格式:HH:MM:SS注释:支持的范围是从 '-838:59:59' 到 '838:59:59' |
YEAR() | 2 位或 4 位格式的年。注释: 4 位格式所允许的值:1901 到 2155。2 位格式所允许的值:70 到 69,表示从 1970 到 2069。 |