[英]One parent row, multiple child rows in another table. How to get them all in one row?
[英]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文檔中查看說明
更新現有表:
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.