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
当我从父表中删除第一行然后从父第一行删除所有子行时。 怎么可能?
答案 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
中查看解释更新现有表格:
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