MySQL外键约束

MySQL外键约束

在MySQL数据库中,外键是一种重要的约束,可以保证数据的完整性和一致性。外键约束是指当前表中的某些字段值必须在其他表中存在,而且不能随意更改或删除。在MySQL中,可以使用foreign key关键字添加外键约束。例如:

CREATE TABLE Orders (
    order_id INT PRIMARY KEY,
    customer_id INT,
    order_date DATE,
    FOREIGN KEY (customer_id) REFERENCES Customers(customer_id)
);
Mysql

上面的SQL语句创建了一个名为Orders的表,其中包含order_id、customer_id和order_date三个字段。customer_id是一个外键,它指向Customers表中的customer_id字段。

阅读更多:MySQL 教程

MySQL foreign_key_checks

在MySQL中,可以使用foreign_key_checks参数来控制外键约束的检查。当foreign_key_checks=1时,如果插入或更新的数据违反了外键约束,则会抛出错误并拒绝执行操作。例如:

mysql> SET foreign_key_checks=1;
Query OK, 0 rows affected (0.00 sec)

mysql> INSERT INTO Orders (order_id, customer_id, order_date) VALUES (1, 100, '2020-01-01');
ERROR 1452 (23000): Cannot add or update a child row: a foreign key constraint fails (`test`.`Orders`, CONSTRAINT `Orders_ibfk_1` FOREIGN KEY (`customer_id`) REFERENCES `Customers` (`customer_id`))

mysql> UPDATE Customers SET customer_id=999 WHERE customer_id=1;
ERROR 1451 (23000): Cannot delete or update a parent row: a foreign key constraint fails (`test`.`Orders`, CONSTRAINT `Orders_ibfk_1` FOREIGN KEY (`customer_id`) REFERENCES `Customers` (`customer_id`))
Mysql

当foreign_key_checks=0时,MySQL将不会检查外键约束,可以随意插入或更新数据。例如:

mysql> SET foreign_key_checks=0;
Query OK, 0 rows affected (0.00 sec)

mysql> INSERT INTO Orders (order_id, customer_id, order_date) VALUES (1, 100, '2020-01-01');
Query OK, 1 row affected (0.01 sec)

mysql> UPDATE Customers SET customer_id=999 WHERE customer_id=1;
Query OK, 1 row affected (0.01 sec)
Mysql

需要注意的是,foreign_key_checks参数只能控制当前会话中的外键检查。如果要在整个数据库中控制外键检查,请使用下面的SQL语句:

SET GLOBAL foreign_key_checks=1;
Mysql

总结

MySQL foreign_key_checks参数可以控制外键约束的检查,避免数据的破坏和不一致。需要根据实际情况来设置foreign_key_checks参数,以保证数据的完整性和一致性。

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程

登录

注册