这篇文章主要介绍MySQL数据完整性的示例分析,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!

数据完整性分为:实体完整性,域完整性,参考完整性。

参考完整性:

参照完整性指的就是多表之间的设计,主要使用外键约束。
多表设计: 一对多、多对多、一对一设计

一:实体(行)完整性

实体完整性通过表的主键来实现。
使用主键来表示一条记录的唯一,且不为空
语法:primary key
主键分类:

逻辑主键:例如ID,不代表实际的业务意义,只是用来唯一标识一条记录(推荐)
业务主键:例如username,参与实际的业务逻辑。
特点:唯一,not null
自动增长:auto_increment

例如:

createtableperson2(idintprimarykeyauto_increment,namevarchar(100));

二:域(列)完整性

非空约束:not null
唯一约束:unique

creattableperson3(idintnotnullunique,namevarchar(20)notnullunique,gendervarchar(20)notnull,phonechar(11)unique#不能有,);

三:参照完整性

1,一对多
a:例如:客户和订单的关系就是一对多,一个客户可以有多张订单,一张订单属于一个客户;
b:外键设置到多的一方

语法输入创建一对多:
创建客户表:

createtablecustomers(idint,namevarchar(20),addressvarchar(100),primarykey(id));

创建订单表:

createtableorders(idint,order_numintprimarykey,pricefloat(4,2),customer_idint,constraintcustomer_ord_fkforeignkey(customer_id)referencescustomers(id));

注:constraint: 约束,foreign key: 外键,references: 参照
创建一个名叫customer_ord_fk的外键约束,外键指的是customer_id,参照的是 customers表中的id列

表格操作创建一对多

customers表



orders表

orders外键设置


创建一个名叫customer_ord_fk的外键约束,外键栏位customer_id,参照的是 customers表中的id列

扩展:四种子表的删除更新策略:

1,cascade 级联策略:使用此种策略时主表的记录被删除或者主键字段被修改时会同步删除或修改子表

2,no action 无动作策略:使用此种策略时要删除主表必须先删除子表,要删除主表的记录必须先删除子表关联的记录,不能更新主表主键字段的值

3,restrict 主表约束策略。此种策略对主表的约束跟 NO ACTION 一样

4,set no置空策略。使用此种策略时,如果主表被删除或者主键被更改,则将子表中的外键设置为null。需要注意的是,如果子表的外键是主键或者是设置为not null的,则主表的删除和主键的更改跟 no action 一样

2,多对多

创建老师表:

Createtableteachers(idintprimarykeyauto_increment,namevarchar(20),genderchar(5),subjectvarchar(20));

创建学生表:

Createtablestudents(idintprimarykey,namevarchar(20),ageint);

第三张为关联表:

Createtableteacher_student(idint,t_idint,s_idint,primarykey(t_id,s_id)constraintteacher_id_fkforeignkey(t_id)referencesstudents(id),constrainsstudent_id_fkforeignkey(s_id)referencesteachers(id));

表格操作多对多

创建老师表:

创建学生表:

第三张表:


3,一对一

(1)一般情况,设计一张表格即可
(2)设计成两张表格

法1:第二张表格中创建一个字段作为外键(设置求唯一 unique)对应第一张表格中的主键;
法2:直接使用第二张表格中的主键作为外键,对应第一张表格的主键。

两张表:unique很重要

createtableuser(idintprimarykeyauto_increment,namevarchar(20),ageint);

createtablecard(idintprimarykeyauto_increment,numvarchar(20)notnull,addressvarchar(100)notnull,user_idintunique,constraintuser_card_fkforeignkey(user_id)referencesuser(id));

以上是“MySQL数据完整性的示例分析”这篇文章的所有内容,感谢各位的阅读!希望分享的内容对大家有帮助,更多相关知识,欢迎关注亿速云行业资讯频道!