DDL文件
DDL(data definition language)是数据定义语言:DDL比DML要多,主要的命令有CREATE、ALTER、DROP等
DDL主要是用在定义或改变表(TABLE)的结构,数据类型,表之间的链接和约束等初始化工作上,他们大多在建立表时使用。
1, 对数据库的操作
2, 对数据表的操作
CREATE:用于创建数据库对象。
DECLARE:除了是创建只在过程中使用的临时表外,DECLARE语句和CREATE语句非常相似。唯一可以被声明的对象是表。并且必须放入用户临时表空间。
DROP:可以删除任何用CREATE(数据库对象)和DECLARE(表)创建的对象。 ALTER:允许修改某些数据库对象的信息。不能修改索引。
DML文件
DML(data manipulation language)是数据操纵语言:它们是SELECT、UPDATE、INSERT、DELETE,就象它的名字一样,这4条命令是用来对数据库里的数据进行操作的语言。
DML主要是针对数据的操作, 主要分为4大类,(增,删,改,查) CRUD操作
DQL文件
DQL(Data Query Language) 数据查询语言
DCL文件
DCL(DataControlLanguage)是数据库控制语言:是用来设置或更改数据库用户或角色权限的语句,包括(grant,deny,revoke等)语句。
SQL语句规范要求
1,数据表、数据字段必须加入中文注释
2,把字段定义为NOT NULL并且提供默认值
解读:
a)null的列使索引/索引统计/值比较都更加复杂,对MySQL来说更难优化
b)null 这种类型MySQL内部需要进行特殊处理,增加数据库处理记录的复杂性;同等条件下,表中有较多空字段的时候,数据库的处理性能会降低很多
c)null值需要更多的存储空,无论是表还是索引中每行中的null的列都需要额外的空间来标识
d)对null 的处理时候,只能采用is null或is not null,而不能采用=、in、<、<>、!=、not in这些操作符号。如:where name!=’shenjian’,如果存在name为null值的记录,查询结果就不会包含name为null值的记录
3,使用utf8字符集,如果有字段需要存储emoji表情之类的,则需要将字段或表设置成utf8mb4
4,库名、表名、字段名:小写字母,下划线风格,禁止数字开头,禁止两个下划线中间只出现数字,禁止复数名词。
5,命名中不允许出现MYSQL数据库中的保留字。如desc、range、match、delayed等,请参考MySQL官方保留字。
6,数据库中不允许存储明文密码
7,必须使用InnoDB存储引擎:支持事务、行级锁、并发性能更好、CPU及内存缓存页优化使得资源利用率更高
8,必须使用UTF8字符集:万国码,无需转码,无乱码风险,节省空间(由于移动设备原因最好使用utf8mb4)
9,必须使用varchar(20)存储手机号
解读:
a)涉及到区号或者国家代号,可能出现+-()
b)手机号会去做数学运算么?
c)varchar可以支持模糊查询,例如:like“138%”
字段设计
1) 表被索引列必须定义为not null,并设置default值
2) 禁止使用float、double类型,建议使用decimal或者int替代
3) 禁止使用blob、text类型保留大文本、文件、图片,建议使用其他方式存储(TFS/SFS),MySQL只保存指针信息
4) 禁止使用varchar类型作为主键语句设计