首页
技术小册
AIGC
面试刷题
技术文章
MAGENTO
云计算
视频课程
源码下载
PDF书籍
「涨薪秘籍」
登录
注册
11.1 索引概述
11.1.1 MySQL索引概述
11.1.2 MySQL索引分类
11.2 创建索引
11.2.1 在建立数据表时创建索引
11.2.2 在已建立的数据表中创建索引
11.2.3 修改数据表结构以为数据表添加索引
11.3 删除索引
12.1 视图概述
12.1.1 视图的概念
12.1.2 视图的作用
12.2 创建视图
12.2.1 查看创建视图的权限
12.2.2 创建视图
12.2.3 创建视图的注意事项
12.3 视图操作
12.3.1 查看视图
12.3.2 修改视图
12.3.3 更新视图
12.3.4 删除视图
第13章 数据完整性约束
13.1 定义完整性约束
13.1.1 实体完整性
13.1.2 参照完整性
13.1.3 用户定义完整性
13.2 命名完整性约束
13.3 更新完整性约束
13.3.1 删除完整性约束
13.3.2 修改完整性约束
第14章 存储过程与存储函数
14.1 创建存储过程和存储函数
14.1.1 创建存储过程
14.1.2 创建存储函数
14.1.3 变量的应用
14.1.4 光标的应用
14.2 调用存储过程和存储函数
14.2.1 调用存储过程
14.2.2 调用存储函数
14.3 查看存储过程和存储函数
14.3.1 SHOW STATUS语句
14.3.2 SHOW CREATE语句
14.4 修改存储过程和存储函数
14.5 删除存储过程和存储函数
15.1 MySQL触发器
15.1.1 创建MySQL触发器
15.1.2 创建具有多条执行语句的触发器
15.2 查看触发器
15.2.1 SHOW TRIGGERS语句
15.2.2 查看triggers表中触发器信息
15.3 使用触发器
15.3.1 触发器的执行顺序
15.3.2 使用触发器维护冗余数据
15.4 删除触发器
第16章 事务
16.1 事务机制
16.1.1 事务的概念
16.1.2 事务机制的必要性
16.1.3 关闭MySQL自动提交
16.1.4 事务回滚
16.1.5 事务提交
16.1.6 MySQL中的事务
16.1.7 回退点
16.2 锁机制
16.2.1 MySQL锁机制的基本知识
16.2.2 MyISAM表的表级锁
16.2.3 InnoDB表的行级锁
16.2.4 死锁的概念与避免
16.3 事务的隔离级别
16.3.1 事务的隔离级别与并发问题
16.3.2 设置事务的隔离级别
当前位置:
首页>>
技术小册>>
MySQL从入门到精通(四)
小册名称:MySQL从入门到精通(四)
### 第13章 数据完整性约束 在数据库设计中,数据完整性是确保存储在数据库中的数据准确、可靠且符合业务规则的重要机制。MySQL作为广泛使用的关系型数据库管理系统,提供了多种数据完整性约束来保证数据的正确性和一致性。本章将深入探讨MySQL中的数据完整性约束,包括主键约束、外键约束、唯一约束、检查约束(在较新版本的MySQL中支持)以及默认值与非空约束,旨在帮助读者从理论到实践全面掌握这些关键概念。 #### 13.1 引言 数据完整性约束是数据库设计不可或缺的一部分,它们定义了表中数据的规则,确保数据在添加、修改或删除时遵循这些规则。数据完整性分为四个主要类别:实体完整性、参照完整性、用户定义完整性(包括唯一性和检查约束)以及域完整性(主要通过数据类型、长度等定义)。 #### 13.2 实体完整性 实体完整性通过主键约束实现,确保表中的每一行都是唯一的,能够唯一标识表中的记录。主键可以是单列或多列的组合,但必须满足以下条件: - **唯一性**:主键列的值在表中必须是唯一的,不允许有重复值。 - **非空性**:主键列的值不能为NULL。 **示例**: ```sql CREATE TABLE Employees ( EmployeeID INT AUTO_INCREMENT, FirstName VARCHAR(50), LastName VARCHAR(50), PRIMARY KEY (EmployeeID) ); ``` 在这个例子中,`EmployeeID`是`Employees`表的主键,保证了每名员工的唯一性,同时因为是自增的,确保了非空性。 #### 13.3 参照完整性 参照完整性通过外键约束实现,用于维护两个表之间的数据一致性。外键是一个表中的字段,它必须是另一个表主键或唯一键的有效值。外键约束确保了数据之间的逻辑关系,防止了孤立的数据记录。 **示例**: 假设有两个表,`Departments`和`Employees`,其中`Employees`表通过`DepartmentID`字段与`Departments`表的`DepartmentID`字段相关联。 ```sql CREATE TABLE Departments ( DepartmentID INT AUTO_INCREMENT, DepartmentName VARCHAR(100), PRIMARY KEY (DepartmentID) ); CREATE TABLE Employees ( EmployeeID INT AUTO_INCREMENT, FirstName VARCHAR(50), LastName VARCHAR(50), DepartmentID INT, PRIMARY KEY (EmployeeID), FOREIGN KEY (DepartmentID) REFERENCES Departments(DepartmentID) ); ``` 在这个例子中,`Employees`表的`DepartmentID`字段是外键,它引用了`Departments`表的主键`DepartmentID`,从而确保了每个员工都归属于一个存在的部门。 #### 13.4 唯一约束 唯一约束保证表中某列或列组合的值是唯一的,但允许NULL值(除非另有指定)。唯一约束与主键约束相似,但一个表可以有多个唯一约束,而主键只能有一个。 **示例**: ```sql CREATE TABLE Users ( UserID INT AUTO_INCREMENT, Email VARCHAR(100), Username VARCHAR(50), PRIMARY KEY (UserID), UNIQUE (Email), UNIQUE (Username) ); ``` 在这个例子中,`Email`和`Username`列都被设置了唯一约束,确保了用户的邮箱和用户名在表中是唯一的。 #### 13.5 检查约束(MySQL 8.0.16及以上) 检查约束允许你指定一个或多个列中必须满足的条件。如果插入或更新的数据违反了这些条件,操作将被拒绝。在MySQL 8.0.16及更高版本中,检查约束得到了支持。 **示例**: ```sql CREATE TABLE Salaries ( EmployeeID INT, Salary DECIMAL(10, 2), CHECK (Salary >= 0), FOREIGN KEY (EmployeeID) REFERENCES Employees(EmployeeID) ); ``` 在这个例子中,`Salary`列被设置了一个检查约束,确保工资值不能小于0。 #### 13.6 默认值与非空约束 - **默认值**:为列指定一个默认值,在插入新记录时,如果该列没有提供值,则使用默认值。 - **非空约束**:要求列在插入或更新记录时必须提供一个值,不能为空(NULL)。 **示例**: ```sql CREATE TABLE Students ( StudentID INT AUTO_INCREMENT, Name VARCHAR(100) NOT NULL, Age INT DEFAULT 18, Enrolled BOOLEAN NOT NULL DEFAULT TRUE, PRIMARY KEY (StudentID) ); ``` 在这个例子中,`Name`和`Enrolled`列被设置为非空,而`Age`列有一个默认值18。 #### 13.7 约束的修改与删除 在数据库设计过程中,可能需要修改或删除已存在的约束。MySQL提供了ALTER TABLE语句来执行这些操作。 - **添加约束**:使用`ADD CONSTRAINT`子句。 - **删除约束**:使用`DROP CONSTRAINT`子句(注意,MySQL中直接删除约束的语法可能略有不同,通常是通过修改表结构来间接实现)。 - **修改约束**:通常需要先删除旧约束,然后添加新约束。 #### 13.8 总结 数据完整性约束是数据库设计中保障数据质量的关键手段。通过合理使用主键约束、外键约束、唯一约束、检查约束以及默认值与非空约束,可以有效地维护数据库的实体完整性、参照完整性以及用户定义完整性。在MySQL中,随着版本的更新,对数据完整性的支持也在不断加强,为开发者提供了更丰富的工具和选项来构建高效、可靠的数据库系统。掌握这些约束的使用,对于提升数据库设计质量、保障数据准确性具有重要意义。
上一篇:
12.3.4 删除视图
下一篇:
13.1 定义完整性约束
该分类下的相关小册推荐:
MySQL从入门到精通(五)
MySQL8.0入门与实践
细说MySQL(零基础到高级应用)
MySQL从入门到精通(一)
MySQL必会核心问题
MySQL 实战 45 讲
SQL零基础到熟练应用(增删改查)
MySQL从入门到精通(二)
MySQL从入门到精通(三)