MySQL表的外键束缚具体介绍及代码示例 外键束缚是数据库中用于维护数据完备性和一致性的重要机制。它确保一个表中的数据与另一个表中的数据相干联,防止无效的数据引用。本文将具体介绍了外键束缚的各个方面,并通过具体的代码示例举行演示。
1. 外键束缚的基本概念
- 主键(Primary Key):一个表中的一个或多个列,用于唯一标识表中的每一行数据。
- 外键(Foreign Key):另一个表中的列,它引用了主键表中的主键列。 外键束缚确保外键表中的外键值必须存在于主键表中的主键列中,或者为空。
2. 创建表时界说外键束缚
假设我们有两个表:departments和employees。
- -- 创建departments表
- CREATE TABLE departments (
- department_id INT PRIMARY KEY,
- department_name VARCHAR(100) NOT NULL
- );
- -- 创建employees表,并添加外键约束
- CREATE TABLE employees (
- employee_id INT PRIMARY KEY,
- employee_name VARCHAR(100) NOT NULL,
- department_id INT,
- FOREIGN KEY (department_id) REFERENCES departments(department_id)
- );
复制代码 3. 级联操作
级联操作包括级联删除和级联更新,当主键表中的数据发生厘革时,外键表中的数据会自动举行相应的厘革。
3.1 级联删除
- -- 创建customers表
- CREATE TABLE customers (
- customer_id INT PRIMARY KEY,
- customer_name VARCHAR(100) NOT NULL
- );
- -- 创建orders表,并设置级联删除
- CREATE TABLE orders (
- order_id INT PRIMARY KEY,
- customer_id INT,
- order_date DATE NOT NULL,
- FOREIGN KEY (customer_id) REFERENCES customers(customer_id) ON DELETE CASCADE
- );
复制代码 3.2 级联更新
- -- 创建orders表,并设置级联更新
- CREATE TABLE orders (
- order_id INT PRIMARY KEY,
- customer_id INT,
- order_date DATE NOT NULL,
- FOREIGN KEY (customer_id) REFERENCES customers(customer_id) ON DELETE CASCADE ON UPDATE CASCADE
- );
复制代码 4. 插入、更新和删除数据
- -- 插入数据到customers表
- INSERT INTO customers (customer_id, customer_name) VALUES (1, 'John Doe');
- INSERT INTO customers (customer_id, customer_name) VALUES (2, 'Jane Smith');
- -- 插入数据到orders表
- INSERT INTO orders (order_id, customer_id, order_date) VALUES (1, 1, '2023-04-01');
- -- 更新customers表中的customer_id
- UPDATE customers SET customer_id = 3 WHERE customer_id = 1;
- -- 删除customers表中的记录,会级联删除orders表中的相关记录
- DELETE FROM customers WHERE customer_id = 3;
复制代码 5. 多列外键束缚
- -- 创建products表
- CREATE TABLE products (
- product_id INT PRIMARY KEY,
- product_name VARCHAR(100) NOT NULL
- );
- -- 创建orders表
- CREATE TABLE orders (
- order_id INT PRIMARY KEY,
- order_date DATE NOT NULL
- );
- -- 创建order_items表,并添加多列外键约束
- CREATE TABLE order_items (
- order_id INT,
- product_id INT,
- quantity INT NOT NULL,
- PRIMARY KEY (order_id, product_id),
- FOREIGN KEY (order_id) REFERENCES orders(order_id) ON DELETE CASCADE,
- FOREIGN KEY (product_id) REFERENCES products(product_id) ON DELETE CASCADE
- );
复制代码 6. 添加、修改和删除外键束缚
6.1 添加外键束缚
- -- 添加外键约束
- ALTER TABLE employees ADD FOREIGN KEY (department_id) REFERENCES departments(department_id);
复制代码 6.2 修改外键束缚
- -- 删除现有外键约束
- ALTER TABLE employees DROP FOREIGN KEY fk_department;
- -- 添加新的外键约束,带级联操作
- ALTER TABLE employees ADD FOREIGN KEY (department_id) REFERENCES departments(department_id) ON DELETE CASCADE ON UPDATE CASCADE;
复制代码 6.3 删除外键束缚
- -- 删除外键约束
- ALTER TABLE employees DROP FOREIGN KEY fk_department;
复制代码 7. 禁用和启用外键束缚
- -- 禁用外键约束
- SET FOREIGN_KEY_CHECKS = 0;
- -- 启用外键约束
- SET FOREIGN_KEY_CHECKS = 1;
复制代码 注意:禁用外键束缚大概会导致数据不一致,应审慎使用。
8. 查课外键束缚信息
- -- 查看表的外键约束
- SELECT
- CONSTRAINT_NAME,
- TABLE_NAME,
- COLUMN_NAME,
- REFERENCED_TABLE_NAME,
- REFERENCED_COLUMN_NAME
- FROM
- INFORMATION_SCHEMA.KEY_COLUMN_USAGE
- WHERE
- TABLE_SCHEMA = 'your_database_name'
- AND TABLE_NAME = 'your_table_name'
- AND REFERENCED_TABLE_NAME IS NOT NULL;
复制代码 注意:将your_database_name和your_table_name替换为现实的数据库和表名称。
9. 外键束缚的优缺点
长处:
- 包管数据的完备性和一致性。
- 防止无效的数据引用。
- 自动维护引用关系,通过级联删除和级联更新。 缺点:
- 大概会影响数据库的性能,尤其是在处理大量数据时。
- 大概会限定数据库的机动性,使得数据库 schema 的更改变得更加复杂。
- 禁用外键束缚大概会导致数据不一致。
10. 总结
外键束缚是数据库中维护数据完备性的重要机制,通过确保表之间的引用关系有效,防止无效的数据引用。本文具体介绍了外键束缚的界说、创建、级联操作、添加/修改/删除束缚、禁用/启用束缚以及其优缺点,并通过具体的代码示例举行了演示。在现实应用中,应根据业务需求审慎使用外键束缚,以平衡数据完备性和系统性能。
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。 |