内容提要
MySQL外键用于定位表记录的列或列组,维护引用完整性,提高查询性能。定义外键约束的语法包括引用表和列、删除和更新操作。可以通过创建新表或修改现有表来添加外键。可以使用SELECT语句查看外键约束,并使用ALTER TABLE语句删除外键。禁用外键检查需谨慎,以避免数据完整性问题。
延伸解读
外键约束的引用动作:CASCADE、SET NULL 与 RESTRICT 的区
在定义外键时,ON DELETE 和 ON UPDATE 子句可指定引用动作。CASCADE 会级联删除或更新子表中的匹配行;SET NULL 会将子表的外键列设为 NULL;RESTRICT 或 NO ACTION 会拒绝父表的删除或更新操作。InnoDB 将 NO ACTION 视为 RESTRICT,而 NDB 支持延迟检查。注意,SET DEFAULT 虽在文档中提及,但 InnoDB 和 NDB 目前均不支持。
外键如何维护引用完整性:一个具体示例
假设 customer 表有 10 条记录,ID 为 1 到 10。若在 orders 表中插入 customer_id 为 11 的记录,数据库会拒绝该操作并发出警告。这避免了为不存在的客户创建订单,从而维护了引用完整性。同时,无需在 orders 表中重复存储客户信息,只需通过外键引用 customer_id 即可。
查看与删除外键:使用 INFORMATION_SCHEMA 和 ALTER TA
要查看数据库中的外键约束,可查询 INFORMATION_SCHEMA.KEY_COLUMN_USAGE 表,指定 referenced_table_schema 和 referenced_table_name。删除外键则需知道约束名,然后使用 ALTER TABLE ... DROP FOREIGN KEY 语句。例如,ALTER TABLE orders DROP FOREIGN KEY fk_orders_customer_id; 即可删除指定外键。
禁用外键检查的注意事项
通过 SET FOREIGN_KEY_CHECKS = 0; 可临时禁用外键检查,适用于批量加载数据等场景,以避免逐条插入时约束检查的开销。但需谨慎:禁用期间添加的数据不会经过外键验证,可能导致数据完整性问题。操作完成后,应使用 SET FOREIGN_KEY_CHECKS = 1; 重新启用检查。
Q&A
MySQL外键的定义是什么?
MySQL外键是用于在数据库中跨表引用相关数据的列或列组,维护引用完整性。
使用MySQL外键的主要好处有哪些?
使用外键可以维护引用完整性、避免重复存储数据,并提高查询性能。
如何在MySQL中创建外键?
可以通过CREATE TABLE或ALTER TABLE语句使用ADD CONSTRAINT来定义外键约束。
如何查看MySQL数据库中的外键约束?
可以使用SELECT语句查询INFORMATION_SCHEMA.KEY_COLUMN_USAGE来查看外键约束。
如何删除MySQL中的外键约束?
使用ALTER TABLE语句和DROP FOREIGN KEY命令可以删除外键约束。
在MySQL中如何临时禁用外键检查?
可以通过设置FOREIGN_KEY_CHECKS系统变量为0来临时禁用外键检查。