簡體   English   中英

如何從其他表中刪除父行以及所有子行

[英]how delete parent row with all child row from other table

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

當我從父表中刪除第一行時,然后是父第一行的所有子行。 這怎么可能??

使用級聯刪除定義外鍵。 然后,當您刪除父行時,子行也一樣。 教程將指導您完成操作。

提示:創建后,您需要在子表中添加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文檔中查看說明

  • -索引的同義詞
  • 約束 -外鍵約束
  • 引用 -外鍵約束的一部分,它使MySQL要求引用表的指定列中的值也必須存在於引用表的指定列中。

更新現有表:

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

除了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;
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;
}

對於INODB:檢查以下鏈接: 級聯更新和刪除

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM