在 MySQL 中,外键 (Foreign Key) 是一种用于定义表与表之间关联的约束,用来确保数据库中的数据一致性和完整性。外键约束帮助确保一个表中的某列值(外键)对应到另一个表中某个列的值(主键或唯一键)。
创建表时,可以通过 FOREIGN KEY 关键字来定义外键约束。
CREATE TABLE orders ( order_id INT PRIMARY KEY, customer_id INT, order_date DATE, FOREIGN KEY (customer_id) REFERENCES customers(customer_id));php152 Bytes© 菜鸟-创作你的创作customer_id 列是外键,指向 customers 表的 customer_id 列。REFERENCES 后面是目标表和列。你也可以给外键约束命名,方便管理和调试。
CREATE TABLE orders ( order_id INT PRIMARY KEY, customer_id INT, order_date DATE, CONSTRAINT fk_customer FOREIGN KEY (customer_id) REFERENCES customers(customer_id));php175 Bytes© 菜鸟-创作你的创作这里 fk_customer 是外键约束的名称。
如果表已经创建,你也可以通过 ALTER TABLE 语句来添加外键约束。
ALTER TABLE ordersADD CONSTRAINT fk_customer FOREIGN KEY (customer_id) REFERENCES customers(customer_id);php106 Bytes© 菜鸟-创作你的创作在定义外键时,可以使用以下几种约束选项来控制外键的行为:
CASCADE:删除父表数据时,自动删除子表中与之相关的数据。SET NULL:删除父表数据时,将子表中相关的数据设置为 NULL。RESTRICT:不允许删除父表数据,如果有子表数据依赖于该父表数据。NO ACTION:与 RESTRICT 相同,但不同的是,NO ACTION 在查询时不会有显式限制。SET DEFAULT:如果父表数据被删除,子表中的外键字段将被设置为其默认值。ON DELETE 选项类似,支持 CASCADE、SET NULL、RESTRICT、NO ACTION 等。CREATE TABLE orders ( order_id INT PRIMARY KEY, customer_id INT, order_date DATE, CONSTRAINT fk_customer FOREIGN KEY (customer_id) REFERENCES customers(customer_id) ON DELETE CASCADE ON UPDATE CASCADE);php223 Bytes© 菜鸟-创作你的创作ON DELETE CASCADE 表示删除父表 customers 中某个客户时,所有相关的订单也会被自动删除。ON UPDATE CASCADE 表示如果 customers 表中的 customer_id 被更新,orders 表中所有相关的 customer_id 也会自动更新。在执行插入、更新或删除操作时,如果违反外键约束,会抛出错误。例如:
customer_id 为 999 的订单,但 customers 表中并没有这个 customer_id,MySQL 会报错。customers 表中某个有相关订单的客户,并且外键约束设置为 RESTRICT 或 NO ACTION,则会阻止删除。SHOW CREATE TABLE orders; 这会显示 orders 表的创建语句,包括所有外键约束。ALTER TABLE 语句。ALTER TABLE orders DROP FOREIGN KEY fk_customer; 这里 fk_customer 是你在创建外键时为约束命名的名字。FOREIGN KEY 来定义的,并且可以设置如 ON DELETE 和 ON UPDATE 等行为选项。如果你有更具体的需求或案例,欢迎进一步交流!
https://www.52runoob.com/archives/3924
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。