📜  MySQL外键(1)

📅  最后修改于: 2023-12-03 15:17:49.197000             🧑  作者: Mango

MySQL外键

MySQL外键是一种约束,用于确保表格之间的数据完整性。外键关系用于将两个表格连接起来,以确保关联表格之间的数据保持一致。在 MySQL 中,外键关系可以用来实现表格的主从关系、父子关系、等等。本文将对 MySQL 外键进行介绍。

什么是 MySQL 外键

MySQL 外键是一种约束,用于将一个表格中的列与另一个表格中的列关联起来。一个外键列必须参考另一个表格的主键列(或者是唯一索引列)。在这种情况下,外键可以确保关联表格之间的数据完整性,防止插入无效的数据和删除关联数据。

创建外键

MySQL 中可以通过以下方式创建外键:

ALTER TABLE table_name
ADD CONSTRAINT constraint_name
FOREIGN KEY (column_name) 
REFERENCES parent_table (parent_column);

其中:

  • table_name 是要创建外键的表格的名称;
  • constraint_name 是要添加的约束名称(可选);
  • column_name 是要添加外键的列;
  • parent_table 是父表格的名称;
  • parent_column 是父主键列(或唯一索引列)的名称。

例如,下面的 SQL 语句创建了一个名为 orders_ibfk_1 的外键,将 customer_id 列与 customers 表格中的 customer_id 列关联起来:

ALTER TABLE orders
ADD CONSTRAINT orders_ibfk_1
FOREIGN KEY (customer_id)
REFERENCES customers (customer_id);
外键约束

外键约束可以确保表格之间的数据完整性。如果试图将无效数据插入到带有外键的表格中,将会引发错误。

例如,如果我们在 orders 表格中插入 customer_id 为 100 的数据,但是 customers 表格中没有 customer_id 为 100 的行,会发生以下错误:

ERROR 1452 (23000): Cannot add or update a child row: a foreign key constraint fails

相反地,如果我们试图删除 customers 表格中已经有关联数据的行,也会发生错误:

ERROR 1451 (23000): Cannot delete or update a parent row: a foreign key constraint fails

这是因为删除行会导致与之关联的行无效。

维护外键约束

在 MySQL 中,外键约束可以通过以下操作进行维护:

  • 启用外键:在添加外键约束后,默认情况下 MySQL 将启用它。如果需要手动启用它,可以使用以下命令:

    SET FOREIGN_KEY_CHECKS = 1;
    
  • 禁用外键:如果需要暂时禁用外键约束,可以使用以下命令:

    SET FOREIGN_KEY_CHECKS = 0;
    
  • 删除外键:可以使用以下命令删除外键约束:

    ALTER TABLE table_name
    DROP FOREIGN KEY constraint_name;
    
总结

MySQL 外键是一种约束,用于确保表格之间的数据完整性。可以使用 ALTER TABLE 命令创建外键约束,并可以使用 FOREIGN KEYREFERENCES 子句实现关联。外键约束可以确保插入和删除操作的正确性,提高数据的完整性和一致性。