五、列属性完整性
1、主键的相关用法以及设置
alter table 表名 add primary key(要设置成主键的字段名1,要设置成主键的字段名2,...); 在没有主键的表中添加主键或复合主键
一张表中最多只能有一个主键,但主键可以由多个字段组成,也就是复合主键
alter table 表名 drop primary key; 删除已有主键
2、unique唯一键相关用法
不能重复,但可以为空,一张表可以有多个唯一键,但一般不用复合唯一键,没啥用
某字段 unique,
alter table 表名 add unique(要设置成唯一键的字段名); 向表中添加唯一键
alter table 表名 drop index 有唯一键属性的字段名; 删除唯一键
主键和唯一键的区别:主键大部分时候不仅仅在一张表中起作用,它是多张表关联在一起的纽扣,是有关联的,就像人的身份证一样,很多场合都要用到。唯一键一般只作用在一张表中,没有关联。
3、注释
单行注释# 多行注释/......./
sql内注释就是之前提到的comment ‘’,内注释可以用show create table 表名;来查看。
4、外键
表与表之间(的字段)有关联时就需要使用外键。外键的操作有三种,严格、置空、级联。
严格:
foreign key(从表中的字段名) references 主表名(主表中的字段名); 设置外键,在创建从表时,用该sql语句作为从表字段的属性来设置外键
alter table 要添加外键的表名(也就是从表) add foreign key (从表中的字段名) references 主表名(主表中的字段名); 添加外键
alter table 从表名 drop foreign key 外键名; 删除外键
外键名要使用show create table 从表名;来查看
当主表中被从表关联的数据发生删除(更改)时,从表中的与主表中被删除的数据相关联的数据置为NULL就是置空,从表中的与主表中被删除的数据相关联的数据也一并删除(更改)就是级联。一般情况下,主表中被从表关联的数据发生删除时,使用置空操作;主表中被从表关联的数据发生修改时,使用级联操作。
级联和置空的功能要再创建表时就设置好。
foreign key(从表中的字段名) references 主表名(主表中的字段名) on delete set null on update cascade;
置空:
foreign key(从表中的字段名) references 主表名(主表中的字段名) on delete set null;
级联:
foreign key(从表中的字段名) references 主表名(主表中的字段名) on update cascade;
六、数据库设计思维
1、关系型数据库
关系 两张表的共有字段去确定数据的完整性
数据冗余也是有一定优点的,虽然浪费了空间占用了资源,但提高了数据查询的效率与性能。要根据项目或现实的需求来设计,并不是说一定不允许出现数据冗余的情况。
实体与实体之间的关系:一对一、一对多,多对一,多对多
2、设计数据库尽量要遵守的范式
注意是尽量遵守而不是必须遵守,一定要结合项目与实际来设计数据库。一共有六条范式,我这里就解释常用的三条。
第一范式 确保每列原子性
确保字段的原子性,在化学中原子就是组成物质的最小单位,原子是不可再分的。让每列都不可再分,也就是设计时尽量要让每个字段要表达的数据内容达到最小单位,分到最细,不可再分
第二范式 非键字段必须依赖于键字段
一个表只描述一个事,不要乱七八糟什么东西都往一张表里放
第三范式 消除传递依赖
消除冗余字段,就是根据项目需求和实际情况来设计字段,做到尽量不要出现冗余,除实际需求有需要外。