ToB企服应用市场:ToB评测及商务社交产业平台

标题: mysql之表的外键束缚 [打印本页]

作者: 灌篮少年    时间: 2025-1-23 18:21
标题: mysql之表的外键束缚
MySQL表的外键束缚具体介绍及代码示例 外键束缚是数据库中用于维护数据完备性和一致性的重要机制。它确保一个表中的数据与另一个表中的数据相干联,防止无效的数据引用。本文将具体介绍了外键束缚的各个方面,并通过具体的代码示例举行演示。

1. 外键束缚的基本概念



2. 创建表时界说外键束缚

假设我们有两个表:departments和employees。
  1. -- 创建departments表
  2. CREATE TABLE departments (
  3.     department_id INT PRIMARY KEY,
  4.     department_name VARCHAR(100) NOT NULL
  5. );
  6. -- 创建employees表,并添加外键约束
  7. CREATE TABLE employees (
  8.     employee_id INT PRIMARY KEY,
  9.     employee_name VARCHAR(100) NOT NULL,
  10.     department_id INT,
  11.     FOREIGN KEY (department_id) REFERENCES departments(department_id)
  12. );
复制代码

3. 级联操作

级联操作包括级联删除和级联更新,当主键表中的数据发生厘革时,外键表中的数据会自动举行相应的厘革。
3.1 级联删除

  1. -- 创建customers表
  2. CREATE TABLE customers (
  3.     customer_id INT PRIMARY KEY,
  4.     customer_name VARCHAR(100) NOT NULL
  5. );
  6. -- 创建orders表,并设置级联删除
  7. CREATE TABLE orders (
  8.     order_id INT PRIMARY KEY,
  9.     customer_id INT,
  10.     order_date DATE NOT NULL,
  11.     FOREIGN KEY (customer_id) REFERENCES customers(customer_id) ON DELETE CASCADE
  12. );
复制代码
3.2 级联更新

  1. -- 创建orders表,并设置级联更新
  2. CREATE TABLE orders (
  3.     order_id INT PRIMARY KEY,
  4.     customer_id INT,
  5.     order_date DATE NOT NULL,
  6.     FOREIGN KEY (customer_id) REFERENCES customers(customer_id) ON DELETE CASCADE ON UPDATE CASCADE
  7. );
复制代码

4. 插入、更新和删除数据

  1. -- 插入数据到customers表
  2. INSERT INTO customers (customer_id, customer_name) VALUES (1, 'John Doe');
  3. INSERT INTO customers (customer_id, customer_name) VALUES (2, 'Jane Smith');
  4. -- 插入数据到orders表
  5. INSERT INTO orders (order_id, customer_id, order_date) VALUES (1, 1, '2023-04-01');
  6. -- 更新customers表中的customer_id
  7. UPDATE customers SET customer_id = 3 WHERE customer_id = 1;
  8. -- 删除customers表中的记录,会级联删除orders表中的相关记录
  9. DELETE FROM customers WHERE customer_id = 3;
复制代码

5. 多列外键束缚

  1. -- 创建products表
  2. CREATE TABLE products (
  3.     product_id INT PRIMARY KEY,
  4.     product_name VARCHAR(100) NOT NULL
  5. );
  6. -- 创建orders表
  7. CREATE TABLE orders (
  8.     order_id INT PRIMARY KEY,
  9.     order_date DATE NOT NULL
  10. );
  11. -- 创建order_items表,并添加多列外键约束
  12. CREATE TABLE order_items (
  13.     order_id INT,
  14.     product_id INT,
  15.     quantity INT NOT NULL,
  16.     PRIMARY KEY (order_id, product_id),
  17.     FOREIGN KEY (order_id) REFERENCES orders(order_id) ON DELETE CASCADE,
  18.     FOREIGN KEY (product_id) REFERENCES products(product_id) ON DELETE CASCADE
  19. );
复制代码

6. 添加、修改和删除外键束缚

6.1 添加外键束缚

  1. -- 添加外键约束
  2. ALTER TABLE employees ADD FOREIGN KEY (department_id) REFERENCES departments(department_id);
复制代码
6.2 修改外键束缚

  1. -- 删除现有外键约束
  2. ALTER TABLE employees DROP FOREIGN KEY fk_department;
  3. -- 添加新的外键约束,带级联操作
  4. ALTER TABLE employees ADD FOREIGN KEY (department_id) REFERENCES departments(department_id) ON DELETE CASCADE ON UPDATE CASCADE;
复制代码
6.3 删除外键束缚

  1. -- 删除外键约束
  2. ALTER TABLE employees DROP FOREIGN KEY fk_department;
复制代码

7. 禁用和启用外键束缚

  1. -- 禁用外键约束
  2. SET FOREIGN_KEY_CHECKS = 0;
  3. -- 启用外键约束
  4. SET FOREIGN_KEY_CHECKS = 1;
复制代码
注意:禁用外键束缚大概会导致数据不一致,应审慎使用。

8. 查课外键束缚信息

  1. -- 查看表的外键约束
  2. SELECT 
  3.     CONSTRAINT_NAME, 
  4.     TABLE_NAME, 
  5.     COLUMN_NAME, 
  6.     REFERENCED_TABLE_NAME, 
  7.     REFERENCED_COLUMN_NAME 
  8. FROM 
  9.     INFORMATION_SCHEMA.KEY_COLUMN_USAGE 
  10. WHERE 
  11.     TABLE_SCHEMA = 'your_database_name' 
  12.     AND TABLE_NAME = 'your_table_name' 
  13.     AND REFERENCED_TABLE_NAME IS NOT NULL;
复制代码
注意:将your_database_name和your_table_name替换为现实的数据库和表名称。

9. 外键束缚的优缺点

长处


10. 总结

外键束缚是数据库中维护数据完备性的重要机制,通过确保表之间的引用关系有效,防止无效的数据引用。本文具体介绍了外键束缚的界说、创建、级联操作、添加/修改/删除束缚、禁用/启用束缚以及其优缺点,并通过具体的代码示例举行了演示。在现实应用中,应根据业务需求审慎使用外键束缚,以平衡数据完备性和系统性能。

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。




欢迎光临 ToB企服应用市场:ToB评测及商务社交产业平台 (https://dis.qidao123.com/) Powered by Discuz! X3.4