MySQL常见数据类型:数值类型,日期/时间类型,字符串类型
数值类型:整数类型包括 tinyint,smallint,middleint,int,bigint
浮点小数类型 float,double,定点小数类型 decimal
日期/时间类型:year,time,date,datetime,timestamp
字符串类型:char,varchar,binary,varbinary,blob,text,enum,set。字符串类型又分为文本字符串,二进制字符串
整数类型
存储需求:tinyint(1字节),smallint(2字节),middleint(3字节),int(4字节),bigint(8字节)
创建数据表时数据类型int(11)括号中的参数表示系统可现实的数值宽度(即数字位数)和数据类型范围没关系,如果插入的数值小于宽度用空格填充,大于宽度时只要数值不超出数据类型范围一样会显示。
整数类型默认宽度如下:
浮点数类型和定点数类型
浮点数和定点数都可以使用(M,N)表示,M为精度,表示总共的位数。N为标度,表示小数的位数。
存储需求:float(4字节),double(8字节),decimal(M,D)(M+2个字节)
其中精度5,数值位数不够用空格填充。
日期与时间类型
存储需求:year(1字节),time(3字节),date(3字节),datetime(8字节),timestamp(4字节)
日期格式:year(YYYY),time(HH:MM:SS),date(YYYY-MM-DD)
datetime(YYYY-MM-DD HH:MM:SS),timestamp(YYYY-MM-DD HH:MM:SS UTC)
year
类型插入数据数字和带“”数字都行
time
小时可以大于24,下表插入时(2 10:10),(3 02)其中2和3表示日,计算时间为2*24+HH
插入当前时间
date
支持不通格式插入如下图:
datetime
支持不通格式插入如下图:
timestamp
插入格式和datetime相同,取值范围小于datetime
文本字符串类型
存储需求:1<=M<=255
char(M字节) 固定长度类型
varchar(L+1字节,L<=M) 变长类型
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或2个字节,取决于枚举值数目)
set(1,2,3,4或8字节,取决于集合成员数量)
char和varchar
下图char类型保存把空格去掉了,varchar保留了2个空格
存储区别:char(4)和varchar(4)
如果同样存储“ab”,char需要4字节,varchar需要3字节
常见运算符
运算符主要4大类:算术运算符 , + - * / %
比较运算符,> < = (>=) (<=) [(!=) | (<>)] in between and (is null) greatest least like regexp
逻辑运算符,not ! and && or || xor(异或)
位运算符, 位与&,位或 |,位非~,位异或^,左移<<,右移>>
运算符优先级由低到高:"=(赋值运算)";"or , ||" ; "xor" ;"&&, and";"not";"between,case,when,then,else";"=(比较运算) ,<=>, >=, <=, >, < ,<>, !=, is ,like, regexp ,in";"|";&";"<<,>>";"+ ,-";"* , / , %";"^";"-(负号),~(位反转),";"!"
算术运算符
比较运算符
<=>安全等于运算符,当两个值都为NULL时返回1,用=会返回null
判断是否为空
between and判断是否在范围内
least返回最小值
greatest返回最大值
in , not in
like 用来匹配字符串 %匹配任何数目的字符,_匹配一个字符
regexp 正则匹配
逻辑运算符
not ! 操作数为0时为真(1),非0时为假(0)
and && 操作数都不为0并且不为null时为真(1)
or || 操作数任意一个数不为0且两个数都不为null为真(1)
xor 任意一个操作数为null返回null,两个数都非0或者都为0时为假(0),一个是0一个不是0时真(1)
位运算符
位运算符为转换2进制之后,对比相同二进制位1和0。
位或(|) 一个或两个为1结果为1,否则为0
位与(&)都为1结果为1,否则为0
位异或(^) 相同位值不同时为1,否则为0
位左移(<<) 二进制位数全部左移,左侧数丢弃,右侧0补位
位右移(>>)二进制位数全部右移,右侧数丢弃,左侧补0
位取反(~) 二进制位数全部反转0和1互换