#数据类型和运算符
Mysql支持多种数据类型,主要有:整数型、浮点小数、定点小数、日期/时间、字符串
数值数据类型:
#=================================================================================================================================================================================
类型名称 说明 默认位数 存储需求 有符号 无符号
#=================================================================================================================================================================================
TINYINT 很小的整数 4 1 byte -128~127 0~255
SMALLINT 小的整数 6 2 byte -32768~32767 0~65535
MEDIUMINT 中等大小的整数 9 3 byte -8388608~8388607 0~16777215
INT(INTEGER) 普通大小的整数 11 4 byte -2147483648~2147483647 0~4294967295
BIGINT 大整数 20 8 byte -9223372036854775808~9223372036854775807 0~18446744073709551615
FLOAT 单精度浮点数 4 byte -3.402823466E+38~-1.175494351E-308 0和1.175494351E-38~3.402823466E+38
DOUBLE 双精度浮点数 8 byte -1.7976931348623157E+308~-2.2250738585072014E-308 0和-1.7976931348623157E+308~-2.2250738585072014E-308
DECIMAL(M,D),DEC 压缩的“严格”定点数 M+2 byte
#=================================================================================================================================================================================
DECIMAL以串存放,选择D时与DOUBLE一样,M时占用M+2byte
eg.
year INT(4)
该声明表示year字段中的数据一般只显示4位数字的宽度,数值位数小于指定宽度由空格填充,大于显示宽度
,值不超过该类型整数的取值范围,数值依然可以插入
后续的数字表示的是该数据类型指定的显示宽度,指定能够显示的数值中数字的个数
日期与时间类型:
#=======================================================================================================
类型名称 日期格式 日期范围 存储需求
#=======================================================================================================
YEAR YYYY 1901~2155 1byte
TIME HH:MM:SS -838:59:59~838:59:59 3byte
DATE YYYY-MM-DD 1000-01-01~9999-12-31 3byte
DATETIME YYYY-MM-DD HH:MM:SS 1000-01-01 00:00:00~9999-12-31 23:59:59 8byte
TIMESTAMP YYYY-MM-DD HH:MM:SS 1970-01-01 00:00:01 UTC~2038-01-19 03:14:07 UTC 4byte
#========================================================================================================
#=========TIME类型===================================================
(1) TIME类型分配简写的值时应注意:没有冒号时最右边两位表示秒;有冒号时从左边开始解析
(2) 使用D HH格式时,小时必须使用双位数值,如果是小于10的小时数,前面加0
(3) 在使用insert插入数据时可以是数据格式或者字符串格式
eg.
INSERT INTO test values(2010),('2010');
#=========DATE类型===================================================
(1) 以YY-MM-DD或YYMMDD字符串各格式表示日期,YY表示两位的年值,"00~69"转为"2000~2069","70~99"转为"1970~1999"
(2) 使用CURRENT_DATE或者NOW(),插入当前系统日期
#=========DATETIME类型===============================================
(1) 以YY-MM-DD HH:MM:SS或YYMMDDHHMMSS表示值遵从之前的Data类型规则
#=========TIMESTAMP类型==============================================
(1) 存储时以UTC时间存储,取出时再转回到当前时区,查询会发现与当前时间值不同
文本字符串类型:
#=======================================================================================================
类型名称 说明 存储需求
#=======================================================================================================
CHAR(M) 固定长度非二进制字符串 M byte,1<=M<=255
VARCHAR(M) 变长非二进制字符串 L+1 byte,L<=M和1<=m<=255
TINYTEXT 非常小的非二进制字符串 L+1 byte, L<2^8
TEXT 小的非二进制字符串 L+2 byte, L<2^16
MEDIUMTEXT 中等大小的非二进制字符串 L+3 byte, L<2^24
LONGTEXT 大的非二进制字符串 L+4 byte, L<2^32
ENUM 枚举类型,只能有一个枚举字符串值 1或2个字节,取决于枚举数目,最大:65535
SET 一个设置,字符串对象可以有零个或对个SET成员 1,2,3,4或8byte,取决于集合成员的数量(最多64个)
#========================================================================================================
二进制字符串类型:
#=======================================================================================================
类型名称 说明 存储需求
#=======================================================================================================
BIT(M) 位字段类型 大约(M+7)/8byte
BINARY(M) 固定长度二进制字符串 M byte
VARBINARY(M) 可变长度二进制字符串 M+1 byte
TINYBLOB(M) 非常小的BLOB L+1 byte, L<2^8
BLOB(M) 小BLOB L+2 byte, L<2^16
MEDIUMBLOB(M) 中等大小的BLOB L+3 byte, L<2^24
LONGBLOB(M) 非常大的BLOB L+4 byte, L<2^32
#========================================================================================================
#BIT类型
M范围为1~64,M默认为1.如果分配值长度小于M位,左边用0填充
#常见运算符分为:算术运算符、比较运算符、逻辑运算符、位操作运算符
算术运算符
#=======================================================
运算符 作用
#=======================================================
= 等于
<=> 安全的等于
<>/!= 不等于
<= 小于等于
>= 大于等于
> 大于
IS NULL 判断一个值是否为NULL
IS NOT NULL 判断一个值是否不为NULL
LEAST 在有两或多个参数时,返回最小值
GREATEST 当有两或多个参数时,返回最大值
BETWEEN AND 判断一个值是否落在两个值之间
ISNULL 与IS NULL 作用相同
IN 判断一个值是IN列表中的任意一个值
NOT IN 判断一个值不是IN列表中的任意一个值
LIKE 通配符匹配
REGEXP 正则表达式匹配
#=======================================================
1.等于运算符(=),不可以判断NULL值,比较时有如下规则
(1) 若有一个或多个参数为NULL,则运算结果返回为NULL
(2) 若同一个比较运算符中的两个参数都是字符串,按字符串进行比较
(3) 若两个参数均为整数,按整数进行比较
(4) 若一个字符串和数字进行相等判断,自动将字符串转换为数字
2.安全等于运算符(<=>),可以用来判断NULL值,当两个操作数为NULL时,返回值为1,当一个为NULL时,返回值为0
3.不等于运算符<>或者!=,不能判断空值NULL,用于判断数字、字符串、表达式不相等的判断。如果不相等,返回1,否则返回0。
4.小于或等于运算符(<=),不能判断空值NULL,小于或等于返回1,否则返回0
5.小于运算符(<),不能判断空值NULL,小于返回1,否则返回0
6.大于或等于运算符(>=),不能判断空值NULL,大于或等于返回1,否则返回0
7.大于运算符(<),不能判断空值NULL,大于返回1,否则返回0
8.IS NULL(ISNULL),IS NOT NULL,条件成立返回1,否则返回0
9.BETWEEN AND运算符,expr BETWEEN min AND max,min<=expr<=max,返回1,否则返回0
10.LEAST运算符:LEAST(值1,值2,值n),返回N(N>=2)个值中的最小值,如果有一个为NULL,返回值为NULL
11.GREATES运算符:GREATEST(value1,value2,....)返回N(N>=2)个值中的最大值,如果有一个为NULL,返回值为NULL
12.IN、NOT IN运算符操作数在或者不在列表中,成立返回1,否则返回0
13.LIKE运算符匹配字符串:语法格式:expr LIKE 匹配条件,成立返回1,否则返回0,expr或匹配条件任何一个为NULL,返回NULL
(1) "%",匹配任何数目的字符,包括零字符
(2) "_",只匹配一个字符
eg.
select 'stud' LIKE 'stud', 'stud' LIKE 'stu_','stud' LIKE '%d','stud' LIKE 't_ _ _','s' LIKE NULL;
依次返回值为 1 1 1 0 NULL
14.REGEXP运算符用来匹配字符串,expr REGEXP 匹配条件,成立返回1,否则返回0,expr或匹配条件任何一个为NULL,返回NULL
匹配的通配符:
(1) '^'匹配以该字符后面的字符开头的字符串
(2) '$'匹配以该字符后面的字符结尾的字符串
(3) '.'匹配任何一个单字符
(4) "[...]"匹配在方括号内的任何字符串,为了命名字符的范围,使用一个'_'
(5) '*'匹配零个或多个在它前面的的字符
eg.
(1) '^s':表示匹配任何以字母's'开头的字符串
(2) 'y$':表示任何以'y'结尾的字符串
(3) '.sky':匹配任何以'sky'结尾,字符长度为4的字符串
(4) '[ab]':匹配任何包含字母'a'或'b'的字符串
逻辑运算符
#================================
运算符 作用
#================================
NOT 或者 ! 逻辑非
AND 或者 && 逻辑与
OR 或者 || 逻辑或
XOR 逻辑异或
#================================
1.NOT 或 ! :操作数为0时所得值为1,非0,所得值为1;操作数为NULL,返回NULL
2.AND 或 &&:所有操作数均为非0值,且不为NULL,返回1,否则返回0,操作数有一个为NULL返回NULL
3.OR 或 ||:两个操作数均为非NULL值,任意一个操作数为非零值,返回1,否则0;一个操作数为NULL,另一个为非0,返回1,否则NULL,两个均为NULL,返回NULL
4.XOR :当任意一个操作数为NULL时,返回NULL,非NULL,且两个操作数都是非0或者都是0值,返回结果为0,一个为0,另一个非0,返回1
位运算符:同C语言一样使用
#================================
运算符 作用
#================================
| 位或
& 位与
^ 位异或
<< 位左移
>> 位右移
~ 位取反
#================================
运算符优先级
#==============================================================
优先级 运算符
#==============================================================
最低 =(赋值运算),:=
||,OR
XOR
&&,AND
NOT
BETWEEN,CASE,WHEN,THEN,ELSE
=(比较运算),<=>,>,>=,<,<=,<>,!=,IS,LIKE,REGEXP,IN
|
&
<<,>>
-,+
*,/(DIV),%(MOD)
^
-(负号),~(位取反)
最高 !
#==============================================================