[英]Mysql foreign key
所以我一次又一次嘗試使列作為外鍵,但是它給我約束名稱錯誤? 我應該輸入什么約束名稱? 我正在使用PHPmyadmin SQL,我嘗試給它命名,例如trackid等,但仍然出現錯誤
ALTER TABLE `ss_ordered_carts`
ADD CONSTRAINT `track_id` FOREIGN KEY (`track_id`)
REFERENCES `ProjectDatabase`.`ss_orders` (`track_id`)
ON DELETE RESTRICT ON UPDATE CASCADE;
MySQL說:文檔
projectdatabase
。 '#sql-1414_6c7'>,CONSTRAINT track_id
FOREIGN KEY( track_id
)REF
ERENCES ss_orders
( track_id
)在更新ss_orders
)
如果您在子表中有針對所引用列字段的數據,要在該字段上添加外鍵,
alter
以添加foreign key
。 步驟1 :禁用外鍵檢查。
set foreign_key_checks=0;
步驟2 :現在添加外鍵約束。
ALTER TABLE `ss_ordered_carts`
ADD CONSTRAINT `track_id` FOREIGN KEY (`track_id`)
REFERENCES `ProjectDatabase`.`ss_orders` (`track_id`)
ON DELETE RESTRICT ON UPDATE CASCADE;
步驟3 :現在重置外鍵檢查。
set foreign_key_checks=1;
您的表ss_ordered_carts
可能填充了錯誤的數據,這些數據無法關聯。 使用此查詢檢查它-
SELECT * FROM ss_ordered_carts t1
LEFT JOIN ss_orders t2
ON t1.track_id = t2.track_id
WHERE
t2.track_id IS NULL;
然后修改表的數據,然后創建外鍵。
嘗試這個。
mysql> SET foreign_key_checks = 0;
mysql> ALTER TABLE ss_ordered_carts
ADD CONSTRAINT track_id
FOREIGN KEY(track_id)
REFERENCES ss_orders(track_id)
mysql> SET foreign_key_checks = 1;
可能是,由於表中存在數據,您正在得到指定的錯誤。
如果子表包含父表中沒有的帶有外鍵的數據,也可能會發生這種情況。 在這種情況下,
Delete from child where child_id NOT IN (select parent_id from parent where parent.id = child.id)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.