父表 ---------------------------------------------------------------------- id 名称 1 a 2 b
子表 --------------------------------------------------------------------- id 父表id 名称 1 1 c 2 1 d 3 1 e 4 2 f 5 2 g
如果我从父表中删除第一行,那么怎样才能删除所有与其相关的子行?
父表 ---------------------------------------------------------------------- id 名称 1 a 2 b
子表 --------------------------------------------------------------------- id 父表id 名称 1 1 c 2 1 d 3 1 e 4 2 f 5 2 g
如果我从父表中删除第一行,那么怎样才能删除所有与其相关的子行?
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文档中查看解释。
更新现有表:
ALTER TABLE child_table
ADD CONSTRAINT id_ibfk_1
FOREIGN KEY (parent_table_id)
REFERENCES parent_table (parent_table_id)
ON DELETE CASCADE
arenaco_login
.#sql-aa0_4fd
(errno:121“写入或更新时重复键”)(详细信息...)
|
为什么? - Salman Quaderfunction 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;
}