目录
DML【data manipulation language】
DDL【data definition language】
数据定义语言,用来维护存储数据的结构
代表指令: create, drop, alter
DML【data manipulation language】
数据操纵语言,用来对数据进行操作
代表指令: insert,delete,update
DML中又单独分了一个DQL,数据查询语言,代表指令: select
DCL【Data Control Language】
数据控制语言,主要负责权限管理和事务
代表指令: grant,revoke,commit
数据类型
—数据类型分类
——数值类型
tinyint类型
有符号范围 -128 ~ 127
无符号范围 0 ~ 255
小数类型
float
语法:
float[(m, d)] [unsigned] : m指定显示长度,d指定小数位数,占用空间4个字节
案例: 小数:float(4,2)表示的范围是-99.99 ~ 99.99,MySQL保存值时会四舍五入
比如99.994 存入时还是99.99 但是如果是 99.995 存入时会是100.00 这时候就会报错
浮点数位数过大会有精度丢失(float表示的精度大约是7位)
decimal
语法:
decimal(m, d) [unsigned] : 定点数m指定长度,d表示小数点的位数
decimal整数最大位数m为65。支持小数最大位数d是30。如果d被省略,默认为0.如果m被省略, 默认是10。所以如果希望小数的精度高,推荐使用decimal。
字符串类型
char
语法:
char(L): 固定长度字符串,L是可以存储的长度,单位为字符,最大长度值可以为255
注:在这里一个汉字也表示一个字符
varchar
语法:
varchar(L):可变长字符串,L表示字符长度,最大65535字节(不是字符长度)
说明:
关于varchar(len),len到底是多大,这个len值,和表的编码密切相关:
varchar长度可以指定为0到65535之间的值,但是有1 - 3 个字节用于记录数据大小,所以说有效字 节数是65532。 当我们的表的编码是utf8时,varchar(n)的参数n最大值是65532/3=21844[因为utf中,一个字符占 用3个字节],如果编码是gbk,varchar(n)的参数n最大是65532/2=32766(因为gbk中,一个字符 占用2字节)。
char和varchar比较
如何选择定长或变长字符串?
如果数据确定长度都一样,就使用定长(char),比如:身份证,手机号,md5
如果数据长度有变化,就使用变长(varchar), 比如:名字,地址,但是你要保证最长的能存的进去。
定长的磁盘空间比较浪费,但是效率高。
变长的磁盘空间比较节省,但是效率低。
定长的意义是,直接开辟好对应的空间
变长的意义是,在不超过自定义范围的情况下,用多少,开辟多少。
日期和时间类型
常用的日期有如下三个:
date :日期 'yyyy-mm-dd' ,占用三字节
datetime 时间日期格式 'yyyy-mm-dd HH:ii:ss' 表示范围从 1000 到 9999 ,占用八字节
timestamp :时间戳,从1970年开始的 yyyy-mm-dd HH:ii:ss 格式和 datetime 完全一致,占用
四字节
enum和set
语法:
enum:枚举,“单选”类型;
enum('选项1','选项2','选项3',...);
set:集合,“多选”类型;
set('选项值1','选项值2','选项值3', ...);
数据插入的时候,如果用可以用选项名,也可以用选项的下标位置,enum从1开始,
set采用二进制,1表示有这个选项,0表示没有,例如我要插入的set类型有选项12,二进制就是011,也就是十进制3;
集合查询使用find_ in_ set函数:
find_in_set(sub,str_list) :
如果 sub 在 str_list 中,则返回下标;如果不在,返回0; str_list 用逗号分隔的字符串。
在查询带有set属性的数据时,用select语句只能绝对查询数据(例我要查询带有选项1的所有数据,用select* from 表名 where =‘选项一’ ),就只会显示选项1一个
而用find_ in_ set就可以查询所有的相关数据