Mysql学习笔记(三:列属性完整性和数据库设计思维)

五、列属性完整性

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、设计数据库尽量要遵守的范式

注意是尽量遵守而不是必须遵守,一定要结合项目与实际来设计数据库。一共有六条范式,我这里就解释常用的三条。

第一范式 确保每列原子性

确保字段的原子性,在化学中原子就是组成物质的最小单位,原子是不可再分的。让每列都不可再分,也就是设计时尽量要让每个字段要表达的数据内容达到最小单位,分到最细,不可再分

第二范式 非键字段必须依赖于键字段

一个表只描述一个事,不要乱七八糟什么东西都往一张表里放

第三范式 消除传递依赖

消除冗余字段,就是根据项目需求和实际情况来设计字段,做到尽量不要出现冗余,除实际需求有需要外。

猜你喜欢

转载自blog.csdn.net/weixin_63268005/article/details/128621968