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