MySQL - 完整性约束条件

完整性约束条件

路的好坏不在于崎岖多少, 只在于谁能最终达到目标。——申宝峰

完整性约束条件是对字段进行限制,要求用户对该属性进行的操作符合特定的要求。如果不满足完整性约束条件,数据库系统将不再执行用户的操作。

PRIMARY KEY (PK)标识该字段为该表的主键,可以唯一的标识记录
FOREIGN KEY (FK)标识该字段为该表的外键,是与之相联系的某表主键
NOT NULL标识该字段不能为空
UNIQUE KEY (UK)标识该字段的值是唯一的
AUTO_INCREMENT标识该字段的值自动增长(整数类型,而且为主键)
DEFAULT为该字段设置默认值

MySQL数据库系统不支持check约束,根据约束数据列限制,约束可分为单列约束和多列约束。主键可分为单字段和多字段主键。

外键约束FOREIGN KEY (FK):

外键约束为了保证多个表之间的参照完整性,即构建两个表的字段之间的参照关系。
例如,表示一个班级和学生的关系,即每个班级有多个学生。首先应该有两个表:班级表和学生表,然后学生表有个表示班级编号的字段classnum,其依赖于班级表的主键,这样的字段classnum就是学生表的外键,通过该字段班级表和 学生表建立了关系。
对于两个具有关联关系的表而言,相关联字段中主键所在的表就是主表(父表),外键所在的表就是从表(子表)。
在具体设置FK约束时,设置FK约束的字段必须依赖于数据库中已经存在的父表的主键,同时外键可以为空Null。
主表删除某条记录时,从表中与之对应的记录也必须有相应的改变。一个表可以有一个或多个外键,外键可以为空值,若不为空值,则每一个外键的值必须等于主表中主键的某个值。

定义外键时,需要遵守下列规则:

  1. 主表必须已经存在于数据库中,或者是当前正在创建的表。如果是后一种情况,则主表与从表是同一个表,这样的表称为自参照表,这种结构称为自参照完整性。
    必须为主表定义主键。

  2. 主键不能包含空值,但允许在外键中出现空值。也就是说,只要外键的每个非空值出现在指定的主键中,这个外键的内容就是正确的。

  3. 在主表的表名后面指定列名或列名的组合。这个列或列的组合必须是主表的主键或候选键。

  4. 外键中列的数目必须和主表的主键中列的数目相同。

  5. 外键中列的数据类型必须和主表主键中对应列的数据类型相同。

一、CASCADE:级联

(1)所谓的级联删除,就是删除主键表的同时,外键表同时删除。
(2)以上面的例子将就是,假如院系表中的某个院系被删除了,那么在学生表中要想查询这个被删除的院系号所对应的院信息就会报错,因为已经不存在这个系了,所以,删除院系表(主键表)时必须删除其他与之关联的表,这里就说明了外键的作用,保持数据的一致性、完整性。当然反过来讲,你删除学生表中的记录,并不影响院系表中的数据,你查询院系号也能正确查询。所以删除外键表中的数据并不影响主键表。

二、NO ACTION(非活动,默认)、RESTRICT:约束/限制

当取值为No Action或者Restrict时,则当在主键表中删除对应记录时,首先检查该记录是否有对应外键,如果有则不允许删除。(即外键表约束主键表)

三、SET NULL

当取值为Set Null时,则当在主键表中删除对应记录时,首先检查该记录是否有对应外键,如果有则设置子表中该外键值为null(,一样是外键表约束主键表,不过这就要求该外键允许取null)。

NO ACTION和RESTRICT的区别:只有在及个别的情况下会导致区别,前者是在其他约束的动作之后执行,后者具有最高的优先权执行。

  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
MySQL完整性约束是用来确保数据库中的数据符合特定规则或条件约束。这些约束可以分为以下几种类型: 1. 唯一约束:唯一约束用于确保列或列的组合中的值是唯一的。可以通过在创建表时使用`UNIQUE`关键字来定义唯一约束,也可以使用`ALTER TABLE`语句添加唯一约束。例如,`ALTER TABLE employee ADD UNIQUE (e_name);` 2. 主键约束:主键约束用于唯一标识表中的每一行数据。主键必须是唯一且非空的。可以通过在创建表时使用`PRIMARY KEY`关键字来定义主键约束。例如,`CREATE TABLE employee (e_id INT PRIMARY KEY, e_name VARCHAR(5), e_sex VARCHAR(5), e_age INT, d_id INT);` 3. 外键约束:外键约束用于确保表之间的关系的完整性。外键约束在一个表中创建,指向另一个表中的主键。可以通过在创建表时使用`REFERENCES`关键字定义外键约束,也可以使用`ALTER TABLE`语句添加外键约束。例如,`ALTER TABLE employee ADD CONSTRAINT fk_d_id FOREIGN KEY (d_id) REFERENCES department (d_id);` 4. 检查约束:检查约束用于确保列中的值满足特定条件。可以在创建表时使用`CHECK`关键字来定义检查约束,也可以使用`ALTER TABLE`语句添加检查约束。例如,`ALTER TABLE employee ADD CONSTRAINT ch_e_age CHECK (e_age >= 0);` 综上所述,MySQL完整性约束包括唯一约束、主键约束、外键约束和检查约束,用于确保数据库中的数据符合特定规则或条件。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [MySQL完整性约束](https://blog.csdn.net/kejiayuan0806/article/details/100766658)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

无谓侠a

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值