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


how delete parent row with all child row from other table

parent_table----------------------------------------------------------------------id名称1个2 bchild_table---------------------------------------------------------------------id parent_table_id名称1 1 c2 1天3 1 e4 2 f5 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

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

ON DELETE  'CASCADE' 
ON UPDATE  'RESTRICT'

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

使用外键:

CREATE TABLE parent (
  id INT NOT NULL,
  PRIMARY KEY (id)
) ENGINE=INNODB;
CREATE TABLE child (
  id INT,
  parent_id INT,
  INDEX par_ind (parent_id),
  FOREIGN KEY (parent_id)
  REFERENCES parent(id)
  ON DELETE CASCADE
) ENGINE=INNODB;

INSERT INTO parent VALUES (1), (2);
INSERT INTO child VALUES (1, 1);
# This query implicitly removes from `child` where parent_id = 1
DELETE FROM parent WHERE id = 1;

定义带有级联删除的外键。然后,当删除父行时,子行也会跟随父行。本教程将指导您完成。

提示:创建时,您需要在子表中添加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 中看到解释

  • 关键字-索引的同义词
  • 约束-外键约束
  • References-外键约束的一部分,它导致MySQL要求引用表的指定列中的值也存在于引用表的特定列中

更新现有表格:

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

对于INODB:检查链接:级联更新和删除

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;
}
相关文章: