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的区别:只有在及个别的情况下会导致区别,前者是在其他约束的动作之后执行,后者具有最高的优先权执行。

### 修改 MySQL 表结构和完整性约束的方法 在 MySQL 中,`ALTER TABLE` 是用于修改现有表结构的关键字。以下是关于如何修改表结构以及设置或更改完整性约束的具体方法: #### 修改表结构 可以通过 `ALTER TABLE` 来执行多种操作,例如修改列定义、添加新列、删除列、重命名表等。 - **修改列的数据类型或属性** 使用 `MODIFY` 子句可以调整已有列的定义。例如,将 `departments` 表中的 `dep_id` 列数据类型更改为 `INT(4)` 并指定其不能为空: ```sql ALTER TABLE departments MODIFY dep_id INT(4) NOT NULL; ``` 这里的语法遵循了所提供的示例[^1]。 - **重命名表** 如果需要更改表名称,则可使用 `RENAME TO` 子句。例如,将 `your_table` 更名为 `my_table` 的 SQL 语句如下所示: ```sql ALTER TABLE your_table RENAME TO my_table; ``` 此外,还可以通过单独的 `RENAME TABLE` 命令实现相同功能[^3]: ```sql RENAME TABLE your_table TO my_table; ``` #### 设置或修改完整性约束 完整性约束确保数据库中数据的一致性和准确性。常见的完整性约束包括主键 (`PRIMARY KEY`)、唯一性 (`UNIQUE`) 和自动增长 (`AUTO_INCREMENT`) 等。 - **为主键或其他字段启用自增特性** 若要使某一列为自增型 (通常配合主键一起使用),可通过 `MODIFY` 或者 `CHANGE` 调整该列配置。比如让 `student_13` 表内的 `id` 字段成为长度为8位数且具备自动递增特性的整数值: ```sql ALTER TABLE student_13 MODIFY id INT(8) AUTO_INCREMENT PRIMARY KEY; ``` 上述命令综合实现了字段类型的转换及其作为主键的同时开启自动编号的功能[^2]。 - **增加新的约束条件** 添加额外的约束如唯一索引或者默认值设定也是可行的操作之一。假设要向某个已存在的表格里追加一栏叫做 email ,并规定它必须独一无二无重复项存在的话,那么应该这样写入相应的SQL指令片段: ```sql ALTER TABLE users ADD COLUMN email VARCHAR(255) UNIQUE; ``` 综上所述,利用 `ALTER TABLE` 结合不同的子句能够灵活地完成对MySQL 数据库内各张表基本架构上的定制化需求处理过程。 ```sql -- 示例:完整的表结构调整与约束应用案例 USE TestDb1; -- 将 your_table 改名为 my_table ALTER TABLE your_table RENAME TO my_table; -- 对 my_table 执行进一步改动 ALTER TABLE my_table MODIFY column_name_new_type DATATYPE, -- 修改某列类型 DROP COLUMN unnecessary_column, -- 删除不需要的列 ADD CONSTRAINT unique_constraint UNIQUE(column_for_unique); -- 新建唯一性约束 ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

无谓侠a

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

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

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

打赏作者

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

抵扣说明:

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

余额充值