mysql數據庫的外鍵約束是用來保證關聯表之間數據的一致性和完整性的。
當我們需要添加數據到關聯表中時,注意添加的數據必須滿足外鍵約束的要求。假設我們有兩個表,一個是用戶表(users),一個是訂單表(orders)。其中訂單表的用戶id(user_id)列以外鍵方式關聯到用戶表的id列。
CREATE TABLE `users` ( `id` int NOT NULL AUTO_INCREMENT, `name` varchar(255) NOT NULL, PRIMARY KEY (`id`) ); CREATE TABLE `orders` ( `id` int NOT NULL AUTO_INCREMENT, `order_no` varchar(255) NOT NULL, `user_id` int NOT NULL, PRIMARY KEY (`id`), KEY `user_id` (`user_id`), CONSTRAINT `orders_ibfk_1` FOREIGN KEY (`user_id`) REFERENCES `users` (`id`) ON DELETE CASCADE ON UPDATE CASCADE );
在添加訂單數據時,我們需要確保用戶表中已經存在與訂單中的用戶id對應的記錄。
INSERT INTO `users` (`name`) VALUES ('張三'); INSERT INTO `orders` (`order_no`, `user_id`) VALUES ('20210101', 1);
如果我們試圖插入一個不存在的用戶id,就會出現外鍵約束錯誤。
INSERT INTO `orders` (`order_no`, `user_id`) VALUES ('20210102', 2);
這時候,mysql就會拋出以下錯誤:
ERROR 1452 (23000): Cannot add or update a child row: a foreign key constraint fails (`test`.`orders`, CONSTRAINT `orders_ibfk_1` FOREIGN KEY (`user_id`) REFERENCES `users` (`id`) ON DELETE CASCADE ON UPDATE CASCADE)
因此,我們在插入關聯表數據時,需要先插入主表數據,確保主鍵存在,再插入關聯表數據。