首页
技术小册
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.1 定义完整性约束 在数据库设计中,确保数据的准确性和可靠性是至关重要的。MySQL通过提供一系列完整性约束(Integrity Constraints)来实现这一目标,这些约束用于限制存储在数据库表中的数据类型、格式以及数据间的相互关系。完整性约束不仅有助于维护数据的正确性,还能提高数据库的性能和安全性。本章将深入探讨MySQL中定义完整性约束的各个方面,包括主键约束、外键约束、唯一约束、检查约束(MySQL 8.0.16及以上版本支持)以及默认值与非空约束。 #### 13.1.1 主键约束(PRIMARY KEY Constraint) 主键约束是数据库表中最重要的一种约束,用于唯一标识表中的每一行记录。主键约束具有以下特性: - **唯一性**:表中的每一行都必须有一个唯一的主键值,不允许有重复。 - **非空性**:主键列不能接受NULL值。 - **一个表只能有一个主键**,但主键可以由一个或多个列(字段)组成,这样的主键称为复合主键。 **定义主键约束的SQL语法**: ```sql CREATE TABLE table_name ( column1 datatype CONSTRAINT pk_name PRIMARY KEY, column2 datatype, ... ); -- 或者在创建表后添加主键约束 ALTER TABLE table_name ADD CONSTRAINT pk_name PRIMARY KEY (column1, column2); -- 复合主键示例 ``` #### 13.1.2 外键约束(FOREIGN KEY Constraint) 外键约束用于在两个表之间建立和维护参照完整性。外键是一个表中的字段,它指向另一个表的主键。通过外键约束,可以确保一个表中的数据与另一个表中的数据保持一致性。 **外键约束的特性**: - **参照完整性**:确保外键列中的每个值都必须在被参照的主键列中存在。 - **级联操作**:当被参照的主键记录被删除或更新时,外键列可以自动更新或删除相应的记录(取决于定义的级联规则)。 **定义外键约束的SQL语法**: ```sql CREATE TABLE table_name ( column1 datatype, column2 datatype, ... foreign_key_column datatype, CONSTRAINT fk_name FOREIGN KEY (foreign_key_column) REFERENCES parent_table(parent_key_column) ON DELETE CASCADE -- 或 SET NULL, NO ACTION, RESTRICT, SET DEFAULT ON UPDATE CASCADE; -- 同上 ); -- 或者在创建表后添加外键约束 ALTER TABLE table_name ADD CONSTRAINT fk_name FOREIGN KEY (foreign_key_column) REFERENCES parent_table(parent_key_column) ON DELETE CASCADE ON UPDATE CASCADE; ``` #### 13.1.3 唯一约束(UNIQUE Constraint) 唯一约束确保表中的一列或列组合中的所有值都是唯一的,与主键约束类似,但唯一约束允许NULL值(除非列被定义为NOT NULL)。一个表可以有多个唯一约束。 **定义唯一约束的SQL语法**: ```sql CREATE TABLE table_name ( column1 datatype UNIQUE, column2 datatype, ... CONSTRAINT uc_name UNIQUE (column3, column4) -- 复合唯一约束 ); -- 或者在创建表后添加唯一约束 ALTER TABLE table_name ADD CONSTRAINT uc_name UNIQUE (column3, column4); ``` #### 13.1.4 检查约束(CHECK Constraint,MySQL 8.0.16+) 检查约束用于限制列中可以存储的值的范围。它允许你指定一个条件表达式,该表达式必须为TRUE,否则数据库将拒绝插入或更新操作。 **定义检查约束的SQL语法**: ```sql CREATE TABLE table_name ( column1 datatype, column2 datatype, ... CONSTRAINT chk_name CHECK (condition) ); -- 或者在创建表后添加检查约束 ALTER TABLE table_name ADD CONSTRAINT chk_name CHECK (condition); ``` **示例**: ```sql CREATE TABLE employees ( id INT AUTO_INCREMENT, name VARCHAR(100), age INT, salary DECIMAL(10, 2), CONSTRAINT pk_employees PRIMARY KEY (id), CONSTRAINT chk_age CHECK (age >= 18 AND age <= 65), CONSTRAINT chk_salary CHECK (salary > 0) ); ``` #### 13.1.5 默认值与非空约束 虽然默认值和非空约束不直接属于完整性约束的范畴,但它们对于确保数据的完整性和准确性同样重要。 - **默认值(DEFAULT)**:为列指定一个默认值,当插入新记录时,如果没有为该列提供值,则自动使用默认值。 **示例**: ```sql CREATE TABLE orders ( order_id INT AUTO_INCREMENT, order_date DATE DEFAULT CURRENT_DATE, ... ); ``` - **非空约束(NOT NULL)**:确保列在插入或更新记录时不能包含NULL值。 **示例**: ```sql CREATE TABLE users ( user_id INT AUTO_INCREMENT, username VARCHAR(50) NOT NULL, ... ); ``` #### 结论 完整性约束是数据库设计中不可或缺的一部分,它们通过限制数据的类型、格式和关系,确保了数据的准确性、一致性和可靠性。MySQL提供了多种类型的完整性约束,包括主键约束、外键约束、唯一约束、检查约束(MySQL 8.0.16及以上版本)、默认值和非空约束。通过合理使用这些约束,可以构建出高效、安全且易于维护的数据库系统。在设计和实现数据库时,深入理解并恰当应用这些约束,将极大地提升数据库的质量和性能。
上一篇:
第13章 数据完整性约束
下一篇:
13.1.1 实体完整性
该分类下的相关小册推荐:
MySQL必会核心问题
MySQL从入门到精通(一)
MySQL8.0入门与实践
MySQL从入门到精通(五)
MySQL从入门到精通(二)
MySQL 实战 45 讲
细说MySQL(零基础到高级应用)
MySQL从入门到精通(三)
SQL零基础到熟练应用(增删改查)