![](/img/trans.png)
[英]How to debug mysql foreign key constraint, ON DELETE CASCADE not deleting rows from Child table on production environment
[英]How to cascade on delete in a foreign key of a mysql table correctly?
我有三個帶有外鍵的表,但是當我運行它時,它們應該在刪除時級聯
"DELETE FROM Tagmap WHERE excerptID = ?"
只有Tagmap
的映射,而Excerpt
和Tag
什么也沒有發生。 我究竟做錯了什么?
CREATE TABLE IF NOT EXISTS excerpt(
excerptID INT UNSIGNED NOT NULL AUTO_INCREMENT,
title VARCHAR(255) NOT NULL,
text VARCHAR(2500) NOT NULL,
comments VARCHAR(2500) NOT NULL,
PRIMARY KEY (excerptID)
) ENGINE=INNODB CHARACTER SET utf8mb4;
CREATE TABLE IF NOT EXISTS tag(
tagID INT UNSIGNED NOT NULL AUTO_INCREMENT,
description VARCHAR(255) NOT NULL ,
PRIMARY KEY (tagID)
) ENGINE=INNODB CHARACTER SET utf8mb4;
CREATE TABLE IF NOT EXISTS tagmap (
excerptID INT UNSIGNED NOT NULL,
tagID INT UNSIGNED NOT NULL,
PRIMARY KEY (excerptID, tagID),
CONSTRAINT excerptFK FOREIGN KEY (excerptID) REFERENCES excerpt (excerptID)
ON DELETE CASCADE
ON UPDATE CASCADE,
CONSTRAINT tagFK FOREIGN KEY (tagID) REFERENCES tag (tagID)
ON DELETE CASCADE
ON UPDATE CASCADE
) ENGINE=INNODB;
這不是外鍵的工作方式。 您從父表中刪除(這里是tag
或excerpt
),然后子記錄會自動刪除。 如果你考慮一下,反過來就不安全了,因為可能有多個孩子引用同一個父母。
因此,您通常會運行此查詢:
DELETE FROM excerpt WHERE excerptID = ?
並且外鍵約束的on delete cascade
選項會自動刪除tagmap
具有相應excerptID
所有記錄。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.