从table1和表2中关联的记录中删除

时间:2016-09-21 17:55:01

标签: php mysql double

我正在尝试从数据库中删除记录。 我有一个带有记录的主表和它自动增加的唯一ID。

然后我有第二个表存储值(可能多于一个)关联第一个表中的ID。

示例:

table1
editors
ID (autoincrement)
EditorName

然后我有第二张表:

table2
ID
editorID (same ID as table1)
bookname

所以这样我想知道如何从table1中删除记录的最佳方法(例如ID = 2),它会自动删除table2中editorID = 2的所有记录。

我尝试了很多方法,但看起来它们不起作用,除非我做两个查询,但我不喜欢这样。有一个更聪明的方法吗?它必须是代码,或者我可以将SQL中的两个表关联起来,并通过ID和editorID关联它们?

3 个答案:

答案 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

修改

要删除table1table2中的条目,无论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;