我正在尝试从数据库中删除记录。 我有一个带有记录的主表和它自动增加的唯一ID。
然后我有第二个表存储值(可能多于一个)关联第一个表中的ID。
示例:
table1
editors
ID (autoincrement)
EditorName
然后我有第二张表:
table2
ID
editorID (same ID as table1)
bookname
所以这样我想知道如何从table1中删除记录的最佳方法(例如ID = 2),它会自动删除table2中editorID = 2的所有记录。
我尝试了很多方法,但看起来它们不起作用,除非我做两个查询,但我不喜欢这样。有一个更聪明的方法吗?它必须是代码,或者我可以将SQL中的两个表关联起来,并通过ID和editorID关联它们?
答案 0 :(得分:1)
解决方案#1:
如果table2
中的外键约束引用ID
table1
行为ON DELETE CASCADE
,则从table1
删除记录将删除相应的来自table2
的条目。
解决方案#2:
您可以使用JOIN
DELETE T1,T2
FROM table1 AS T1
INNER JOIN table2 AS T2 ON T1.ID = T2.editorID
WHERE T1.ID = 2;
参见 Related post
修改强>
要删除table1
和table2
中的条目,无论table2
中是否存在相应的条目,您都需要将INNER JOIN
替换为LEFT JOIN
DELETE T1,T2
FROM table1 AS T1
LEFT JOIN table2 AS T2 ON T1.ID = T2.editorID
WHERE T1.ID = 2;
答案 1 :(得分:0)
创建一个用于链接这两个表的外键
在这两个表之间定义一个外键,让MySQL知道何时删除编辑器时级联:
CREATE TABLE editors (
ID int(11) NOT NULL AUTO_INCREMENT,
EditorName varchar(255) NOT NULL,
PRIMARY KEY (ID)
)engine=InnoDB;
CREATE TABLE edits (
ID int(11) NOT NULL AUTO_INCREMENT,
bookname varchar(255) NOT NULL,
editorID int(11) NOT NULL,
PRIMARY KEY (ID),
KEY editorID (editorID),
CONSTRAINT edits_ibfk_1
FOREIGN KEY (editorID)
REFERENCES editors (ID)
ON DELETE CASCADE
)engine=InnoDB;
答案 2 :(得分:0)
检查一下。
DELETE table1
FROM table1
INNER JOIN table2 ON table1.ID = table2.editorID
WHERE table1.ID = 2;