如何从其他表中删除所有子行的父行

时间:2016-05-04 04:28:25

标签: php mysql

parent_table
----------------------------------------------------------------------
id         name
1           a
2           b

child_table
---------------------------------------------------------------------
id        parent_table_id            name
1               1                      c
2               1                      d
3               1                      e
4               2                      f
5               2                      g

当我从父表中删除第一行然后从父第一行删除所有子行时。 怎么可能?

6 个答案:

答案 0 :(得分:2)

使用cascading deletes定义外键。然后,当您删除父行时,子行遵循相同的行。 This教程将指导您完成。

提示:您需要在创建时在子表中添加ON DELETE CASCADE

在你的情况下:

CREATE TABLE parent_table(
  id int(11) NOT NULL AUTO_INCREMENT,
  name varchar(255) NOT NULL,
  PRIMARY KEY (id)
) ENGINE=InnoDB;

CREATE TABLE child_table (
  id int(11) NOT NULL AUTO_INCREMENT,
  parent_table_id int(11) NOT NULL,
  name varchar(255) NOT NULL,
  PRIMARY KEY (id),
  KEY parent_table_id (parent_table_id),
  CONSTRAINT id_ibfk_1 
  FOREIGN KEY (parent_table_id) 
  REFERENCES parent_table (parent_table_id) 
  ON DELETE CASCADE
) ENGINE=InnoDB;

现在,您的删除查询:

DELETE FROM parent_table
WHERE id= 2

您的结果数据将是:

parent_table
----------------------------------------------------------------------
id         name
1           a

child_table
---------------------------------------------------------------------
id        parent_table_id            name
1               1                      c
2               1                      d
3               1                      e

根据评论中的要求:

您可以从mysql docs

中查看解释
  • 密钥 - 索引的同义词
  • 约束 - 外键约束
  • 引用 - 外键约束的一部分,它导致MySQL要求引用表的指定列中的值也出现在指定的列中(s参考表格。

更新现有表格:

ALTER TABLE child_table 
      ADD CONSTRAINT id_ibfk_1 
      FOREIGN KEY (parent_table_id) 
      REFERENCES parent_table (parent_table_id) 
      ON DELETE CASCADE

答案 1 :(得分:2)

cascade delete外,您可以使用join,请参阅以下示例:

DELETE parent_table, child_table 
FROM parent_table INNER JOIN child_table
  ON parent_table.id = child_table.parent_table_id
WHERE parent_table.id = 1

答案 2 :(得分:2)

在添加外键约束时,请使用以下选项

ON DELETE  'CASCADE' 
ON UPDATE  'RESTRICT'

现在,如果删除父行,则所有关联的子行将被删除。

答案 3 :(得分:1)

使用foreign keys

{{1}}

答案 4 :(得分:0)

function delete($id){
$query = "DELETE FROM parent_table WHERE id = $id";
$query = "DELETE FROM child_table WHERE parent_table_id = $id";
$result = mysqli_query($connect, $query) or die(mysqli_error($connect));
return true;
}

答案 5 :(得分:0)

对于INODB:请查看链接:Cascading UPDATES and DELETES