簡體   English   中英

mysql外鍵

[英]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說:文檔

  • 1452-無法添加或更新子行:外鍵約束失敗( projectdatabase

    '#sql-1414_6c7'>,CONSTRAINT track_id FOREIGN KEY( track_id )REF

    ERENCES ss_orderstrack_id )在更新ss_orders

如果您在子表中有針對所引用列字段的數據,要在該字段上添加外鍵,

  1. 首先,您必須禁用外鍵檢查。
  2. 然后alter以添加foreign key
  3. 最后重置約束檢查。

步驟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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM