2
我有這兩個表和一些數據已經在他們。有沒有辦法在表中已經有一些數據的情況下添加一個外鍵?
CREATE TABLE `system_user_data` (
`id_user` bigint(20) NOT NULL AUTO_INCREMENT,
`user_login` varchar(15) DEFAULT NULL,
PRIMARY KEY (`id_user`)
) ENGINE=InnoDB AUTO_INCREMENT=120 DEFAULT CHARSET=utf8;
CREATE TABLE `system_user_tokens` (
`id_token` bigint(20) NOT NULL AUTO_INCREMENT,
`token_user` bigint(20) DEFAULT NULL,
`token_token` varchar(20) DEFAULT NULL,
`token_createdate` date DEFAULT NULL,
PRIMARY KEY (`id_token`)
) ENGINE=InnoDB AUTO_INCREMENT=6 DEFAULT CHARSET=utf8;
當我嘗試添加外鍵token_user = id_user時出現錯誤。當沒有任何數據時它正在工作。
alter table system_user_tokens add foreign key (token_user) references system_user_data (id_user);
ERROR 1452 (23000): Cannot add or update a child row: a foreign key constraint fails (`name`.`#sql-1b44_727`, CONSTRAINT `#sql-1b44_727_ibfk_1` FOREIGN KEY (`token_user`) REFERENCES `system_user_data` (`id_user`))
外鍵旨在強制數據中的父子關係。如果你有懸掛的記錄,那麼你應該不使用外鍵,直到你修復了斷開的關係。這樣做基本上違背了外鍵的用途。 「我有一個蘋果,有沒有辦法讓它不是蘋果?」 –
您可以添加一個有效的默認值,然後根據需要進行更新。不完全是一個好方法。 –
這就是說,你* CAN *暫時禁用FK強制執行,但通常只在某些特殊情況下使用(例如加載轉儲/備份文件)。在正常使用情況下,禁用它們並不是一個好主意。請參閱http://stackoverflow.com/questions/15501673/how-to-temporarily-disable-a-foreign-key-constraint-in-mysql –