mysql完整性约束包括哪些?
封面图
•
2025-12-19
•
MySQL
183
0
0
0
MySQL 中的**完整性约束**是为了保证数据库中数据的**正确性、一致性和有效性**而设置的一系列规则。主要的完整性约束包括以下几种: --- ### 一、实体完整性(Entity Integrity) **作用:** 确保表中每条记录都是唯一的,可以通过主键来实现。 #### 1. **主键约束(PRIMARY KEY)** - 每个表只能有一个主键。 - 主键列不能为 `NULL`,且值必须唯一。 - 示例: ```sql CREATE TABLE users ( id INT PRIMARY KEY, name VARCHAR(50) ); ``` #### 2. **唯一约束(UNIQUE)** - 保证某一列或某几列的值在表中是唯一的。 - 允许 `NULL` 值,但每个 `NULL` 只能出现一次。 - 示例: ```sql CREATE TABLE users ( id INT, email VARCHAR(100) UNIQUE ); ``` --- ### 二、参照完整性(Referential Integrity) **作用:** 确保两个表之间的关系是正确的,即外键必须引用另一个表中存在的主键。 #### 3. **外键约束(FOREIGN KEY)** - 用于建立两个表之间的关联。 - 外键列的值必须存在于被引用表的主键或唯一键中。 - 示例: ```sql CREATE TABLE orders ( order_id INT PRIMARY KEY, user_id INT, FOREIGN KEY (user_id) REFERENCES users(id) ); ``` --- ### 三、域完整性(Domain Integrity) **作用:** 确保列中的数据符合定义的数据类型和格式。 #### 4. **非空约束(NOT NULL)** - 确保某列不允许有 `NULL` 值。 - 示例: ```sql CREATE TABLE users ( id INT PRIMARY KEY, name VARCHAR(50) NOT NULL ); ``` #### 5. **默认值约束(DEFAULT)** - 当插入数据时,如果未指定该列的值,则使用默认值。 - 示例: ```sql CREATE TABLE users ( id INT PRIMARY KEY, created_at DATETIME DEFAULT CURRENT_TIMESTAMP ); ``` #### 6. **检查约束(CHECK)** - 限制列中的值必须满足某个条件。 - MySQL 在 8.0.16 之前不支持 `CHECK` 约束(只是语法上支持,不会执行),但在 8.0.16 及之后版本中开始支持。 - 示例: ```sql CREATE TABLE employees ( id INT PRIMARY KEY, salary DECIMAL(10,2) CHECK (salary > 0) ); ``` --- ### 四、用户自定义完整性(User-defined Integrity) **作用:** 由用户根据业务需求自行定义的约束,通常通过触发器(Trigger)、存储过程(Stored Procedure)或应用程序逻辑实现。 #### 7. **触发器(Trigger)** - 在特定操作(如 INSERT、UPDATE、DELETE)发生时自动执行的 SQL 语句。 - 用于实现复杂的业务规则。 - 示例: ```sql DELIMITER // CREATE TRIGGER before_insert_users BEFORE INSERT ON users FOR EACH ROW BEGIN IF NEW.age < 0 THEN SET NEW.age = 0; END IF; END // DELIMITER ; ``` --- ### 总结 | 完整性类型 | 约束类型 | 说明 | |------------|--------------------|------| | 实体完整性 | 主键约束(PRIMARY KEY) | 确保记录唯一 | | 实体完整性 | 唯一约束(UNIQUE) | 确保列值唯一 | | 参照完整性 | 外键约束(FOREIGN KEY)| 确保表间引用正确 | | 域完整性 | 非空约束(NOT NULL) | 不允许 NULL 值 | | 域完整性 | 默认值约束(DEFAULT) | 设置默认值 | | 域完整性 | 检查约束(CHECK) | 限制值范围(MySQL 8.0+ 支持) | | 用户自定义 | 触发器(TRIGGER) | 自定义业务规则 | --- 如果你需要了解某种具体约束的使用场景或示例,也可以告诉我,我可以进一步详细说明。
上一篇:
mysql什么是事务?及其特性?
下一篇:
SQL语言包括哪几部分?每部分都有哪些操作关键字?
标题录入,一次不能超过6条
留言
评论