mysql 外键和作用和基本使用

发布时间:2025-04-27      访问量:25
在 MySQL 里,外键是一种约束,它在两个表之间建立关联,确保数据的引用完整性。下面会从定义、作用、创建、删除以及使用注意事项等方面详细介绍 MySQL 外键。

外键的定义与作用
外键是一个表中的一列或多列,其值必须与另一个表(通常称为主键表或父表)中的主键值相匹配,或者为空值。外键的主要作用是维护表之间的数据一致性和引用完整性,防止在相关表中插入或更新无效的数据。

创建外键
在创建表时或者在已有表上添加外键约束,都可以定义外键。

创建表时定义外键
下面的示例创建了两个表:`departments`(部门表)和 `employees`(员工表),并在 `employees` 表中定义了一个外键关联到 `departments` 表的 `dept_id` 列。
sql -- 创建部门表 CREATE TABLE departments ( dept_id INT PRIMARY KEY, dept_name VARCHAR(50) ); -- 创建员工表并定义外键 CREATE TABLE employees ( emp_id INT PRIMARY KEY, emp_name VARCHAR(50), dept_id INT, -- 定义外键约束 FOREIGN KEY (dept_id) REFERENCES departments(dept_id) );

在已有表上添加外键
若表已经创建好,可使用 `ALTER TABLE` 语句添加外键约束。
sql -- 为 employees 表添加外键约束 ALTER TABLE employees ADD CONSTRAINT fk_employees_departments FOREIGN KEY (dept_id) REFERENCES departments(dept_id);

删除外键
若要删除外键约束,可使用 `ALTER TABLE` 语句。
sql -- 删除 employees 表的外键约束 ALTER TABLE employees DROP FOREIGN KEY fk_employees_departments;

外键的级联操作
当父表中的记录被删除或更新时,可通过设置外键的级联操作来自动处理子表中的相关记录。常见的级联操作有 `ON DELETE` 和 `ON UPDATE`。

级联删除(`ON DELETE CASCADE`)
当父表中的记录被删除时,子表中与之关联的记录也会被自动删除。
sql CREATE TABLE employees ( emp_id INT PRIMARY KEY, emp_name VARCHAR(50), dept_id INT, FOREIGN KEY (dept_id) REFERENCES departments(dept_id) ON DELETE CASCADE );

级联更新(`ON UPDATE CASCADE`)
当父表中的主键值被更新时,子表中与之关联的外键值也会被自动更新。
sql CREATE TABLE employees ( emp_id INT PRIMARY KEY, emp_name VARCHAR(50), dept_id INT, FOREIGN KEY (dept_id) REFERENCES departments(dept_id) ON UPDATE CASCADE );

使用外键的注意事项
- **性能影响**:外键约束会增加数据库的维护开销,特别是在插入、更新和删除操作时,可能会影响性能。
- **数据完整性**:外键可以保证数据的引用完整性,但在使用级联操作时要谨慎,避免意外删除或更新数据。
- **表结构设计**:在设计表结构时,应合理使用外键来建立表之间的关联,避免出现循环引用或复杂的外键关系。
堆内存
多线程
strdup
初始化器
冒泡排序
增删改查
BufferedReader
输入输出
面向对象
生命周期
闭包的概念
原型链
Flask
mysql-connector-python
单例模式
浅拷贝
隔离级别
索引
InnoDB
左连接
聚合函数
PuTTY
TRUNCATE
str_starts_with_many
DateTime
array_combine
闭包的概念