一,字符串类型
char和varchar
1. 都需要指定字符的长度,char中的长度是字符的长度,而varchar的长度是字节的长度
2. char中指定的长度就是实际占用的长度,而varchar指定的长度只是一个范围,所以varchar还要拿1-2个字节存储该字符串到底有多少个字节,并且varchar中能够实际存储的字符跟编码有关(utf8编码20000多,gbk编码30000多)
3. varchar对存储空间的占用更灵活,但是char的效率更高
4.如果字符串的长度是固定已知的,就用char,如果字符串的长度是可变的,就用varchar
b.text:文本类型,使用起来类似于varchar,只不过这里不需要指定长度,其中longtext认为文本没有限制
c.enum:枚举类型,类似于单选!实际存储的是原选项的位置,位置用1,2,3,4来代替,理论上最多可以表示65535个选项
d.set:集合类型,类似于多选!实际存储的是也原选择的位置,位置用1,2,4,8来代替,然后把所有选项的位置相加,理论上最多可以表示64个多选项
e.binary、varbinary、blob:二进制文本类型,就是字节流的char、varchar和text,在实际的项目中,很少使用
二,列属性
null|not null,缺省值是null,也就是允许为空,如果是notnull而又没有给该字段赋值的话,系统会首先查询该字段有没有默认值
default:给一个字段一个默认值,如果没有给该字段填充数据,就用该默认值来代替,通常就是配合not null一起使用
primary key:主键,唯一可区别其他记录的字段,一个表中只能有一个主键,也可以很多个字段组合成一个组合主键,而且不允许为空!
unique key:唯一键,与主键的区别是唯一键可以有很多个,而且允许为空
auto_increment:自动增长,使用这个属性有两个条件,第一该字段必须为整型,第二该字段必须存在索引,通常就是配合主键一起使用,也可以通过修改表选项设置自动增长的默认初始值
comment:列注释
三,索引
索引的本质就是在“原始表”的基础之上根据某个或某些字段进行排序后的“内置表”
索引的最大优势可以极大的提高查询速度
在提高查询速度的同时也降低了增删改的速度
四,实体与实体关系
一对一:主要用来做数据表的优化(垂直分割)
一对多:在多的那一方增加一个字段,用于指向1的那一方
多对多:增加一个中间表,就是将一个多对多的关系拆分成两个一对多的关系
五,外键
只有InnoDB存储引擎才可以使用
关键字:foreign key
级联操作:主表更新onupdate[级联操作],主表删除:语法形式为:on delete[级联操作]。cascade:同步操作,set null:设置为null,restrict:拒绝主表的更新或删除
定义方式:foreignkey(本表字段名) references 父表(主键) on delete[cascade|set null|restrict] on update [cascade|setnull|restrict]
六,范式
1第一范式:要求把各种数据设计成一个一个的字段,不能再分
2第二范式:在满足第一范式的基础之上,表中的一行都具有唯一的可以区分的特性;不能有部分依赖
3第三范式:在满足第二范式的基础之上,消除传递依赖