mysql实体完整性实现方法_MySQL数据库——数据完整性(实体完整性、域完整性、参照完整性)...

数据完整性的概念

数据完整性是为了保证插入到数据库中的数据是正确的,防止用户可能的错误输入。

数据完整性分为实体完整性、域完整性、参照完整性。

实体(行)完整性

实体完整性中的实体指的是表中的行,因为一行记录对应一个实体。

实体完整性规定表的一行在表中是唯一的实体,不能出现重复。

实体完整性通过表的主键来实现。

主键关键字: primary key

主键特点: 不能为null,并且唯一。

主键分类:

​ 逻辑主键:例如ID,不代表实际的业务意义,只是用来唯一标识一条记录(推荐)

​ 业务主键:例如username,参与实际的业务逻辑。

主键使用方式:

​ 方式一:

Create table t1(

​ id int primary key,

​ name varchar(100)

);

59139dc806db3d21328205604f340f9a.png

插入数据:

insert into t1 values(1,’zs’);

insert into t1 values(2,’ls’);

4a96f5901fcd5fcf393266ac6032ec01.png

主键自动增长:

关键字: auto_increment

下面是主键自动增长的例子

​create table t4(

​id int primary key auto_increment,

​name varchar(100)

);

64a93a33911adc42c512d458b250e89e.png

插入数据:

insert into t4(name) values(‘zs’);

insert into t4 values(null,’ls’);

f6125de11c80674938032575923f7c87.png

域(列)完整性

域(列)完整性指数据库表的列(即字段)必须符合某种特定的数据类型或约束

​ 非空约束:not null

​ 唯一约束: unique

create table t5(

​username varchar(100) not null unique,

​gender varchar(100) not null,

​phonenum varchar(100) unique

​);

87ac9ccb8f22a61133dc8cbf8cac0404.png

username 唯一 ,如果有重复就会出现错误:

[Err] 1062 - Duplicate entry 'ls' for key 'username'

如果第二次插入代码insert into student3(username,gender,phone) VALUES('ls','男','112');

就会出现错误:[Err] 1062 -关键字“用户名”的重复条目“ls”

gender 不能为 NULL,如果不输入就会出现错误:

Field 'gender' doesn't have a default value

执行下面这条代码insert into student3(username,gender,phone) values('ll','男','113');

就会出现错误Duplicate entry 'll' for key 'username'

关键字“用户名”的重复条目“ll”

c8481e4c23d1832248701006cc6d390e.png

80c8a2b9cec22027398305c6c79a1082.png

参照完整性**

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

多表设计: 一对多、多对多、一对一设计

一对多

下面举例说明:

1.客户和订单的关系就是一对多,一个客户可以有多张订单,一张订单属于一个客户;

f44e6143ae6101aaf6ddc9aa4a2f1826.png

​ 创建客户表:

create table customers(

​id int,

​name varchar(100),

​address varchar(255),

​primary key(id)

);

创建订单表:

create table orders(

​order_num int primary key,

​price float(8,2),

​status int,

​customer_id int,

constainct customer_id_fk foreign key(customer_id) references customers(id)

);

外键约束: constraint customer_id_fk foreign key(customer_id) references customers(id);

注: constraint: 约束的意思。foreign key: 外键。references: 参照

创建一个名叫customer_id_fk的外键约束,其中外键指的是customer_id,并且参照的是 customers表中的id列。

图形界面操作的过程是:

7ef9c0ec38acce68ab5b7359a8375388.png

46345cba6abdb67187c15d1852c5e030.png

11fcf199785654c2a1c5e151bc434cf1.png

a1c935b4010be152d3a56c2a9b51b203.png

a3ba3b79ca16916d0b191927aba8b63e.png

子表的删除、更新策略

子表的删除更新策略一共有四种:

1. CASCADE 级联策略。

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

f43287de11db6a602ee6bab00c8072f1.png

89d86223b803f4d528d8b6d96011725e.png

9fc69da3457035665faa31320ec95a04.png

2. NO ACTION 无动作策略。

使用此种策略时要删除主表必须先删除子表,要删除主表的记录必须先删除子表关联的记录,不能更新主表主键字段的值。

16bd542fb3062fe98ec95a7bd0b77215.png

3. RSTRICT 主表约束策略。

此种策略对主表的约束跟 NO ACTION 一样

4. SET NO 置空策略。

使用此种策略时,如果主表被删除或者主键被更改,则将子表中的外键设置为NULL。需要注意的是,如果子表的外键是主键或者是设置为NOT NULL的,则主表的删除和主键的更改跟 NO ACTION 一样。

2d09c24bfc5b2065f780e55fd1e6dc95.png

dd52f7080e40ca59cbe4660386d93f2c.png

73b7b9d48415f728b386d12efa52bed1.png

多对多

老师和学生是多对多关系, 一个老师对应多个学生,一个学生被多个老师教

9201eceb8319bffba00de45bfe46432b.png

注意:

需要创建第三张表,并且公共的字段,可以放入到第三张表格中。

设置外键对应其他表格中的主键

创建老师表:

​Create table teachers(

​id int,

​name varchar(100)

​salary float(8,2),

​primary key(id)

);

创建学生表:

Create table students(

​id int,

​name varchar(100),

​grade varchar(100),

​primary key(id)

);

第三张表格:

Create table teacher_student(

​t_id int,

​s_id int,

​primary key(t_id,s_id)

CONSTRAINT teacher_id_fk FOREIGN KEY(t_id) REFERENCES teachers(id),

CONSTRAINT student_id_fk FOREIGN KEY(s_id) REFERENCES students(id)

);

28352f28a2aaf3f6a5e231a465429a7c.png

2fc2d5cacc9af3b3a7da75738c47bf7b.png

5263a73ebae24bd630fb07da55401449.png

一对一

按照外键关联

1.在IdCard表中的外键添加唯一约束

1fa6dce4de8e4edfc7c96c5bff6a71f7.png

按照主键关联,对主键添加外键约束

d54e66acf463ac7911d496204978e1c9.png

实际开发中直接设计一张表格就可以了。

注意:

一般情况,设计一张表格即可;

设计成两张表格:

第二张表格中创建一个字段为外键(设置成唯一 unique)对应 第一张表格中的主键;

直接使用第二张表格中的主键为外键,对应第一张表格中的主键。

  • 0
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值