你好,有人可以帮助我。
我想从多个表中删除。
我想从id_grupo = 6
删除grupos
。
但是当我删除它时,我想delete from gerir_posts where id_grupo = 6
。但是来自posts
,id_post = 4
,来自gerir_posts id_post
的内容相同;我也想删除它。
所以我真正想要的是当我删除一个grup时,该grup中的帖子也会被删除。
这是我的数据库的一个例子。
CREATE TABLE Utilizadores
(
id_utilizador int auto_increment not null primary key,
Nome varchar(50)
);
INSERT INTO utilizadores VALUES (1,'Admin');
CREATE TABLE Grupos
(
id_grupo int auto_increment not null primary key,
Nome_grupo varchar(50)
);
INSERT INTO grupos VALUES (1,'Grupo');
CREATE TABLE Gerir_grupos
(
id_gerir_grupo int auto_increment not null primary key,
id_grupo int,
id_utilizador int,
FOREIGN KEY (id_utilizador) references Utilizadores(id_utilizador),
FOREIGN KEY (id_grupo) references Grupos(id_grupo) on delete cascade
);
INSERT INTO gerir_grupos VALUES (1,1,1);
CREATE TABLE Posts
(
id_post int auto_increment not null primary key,
id_utilizador int,
Titulo_do_post varchar(50),
Corpo_do_post varchar(500),
FOREIGN KEY (id_utilizador) references Utilizadores (id_utilizador)
);
INSERT INTO posts VALUES (1,1,"teste","grupo teste");
CREATE TABLE Gerir_posts
(
id_gerir_post int auto_increment not null primary key,
id_post int,
id_grupo int,
FOREIGN KEY (id_post) references Posts (id_post) on delete cascade,
FOREIGN KEY (id_grupo) references Grupos (id_grupo)on delete cascade
);
INSERT INTO gerir_posts VALUES (1,1,1);
如果这可以帮助
答案 0 :(得分:3)
您不能在单个删除语句中指定多个表。
begin;
delete posts where post_id in (select post_id from gerir_posts where ...);
delete gerir_posts where ... ;
delete grupos where ... ;
commit;
这样,一切都可以一起删除,也可以保持不变。
ON DELETE CASCADE
create table posts (
post_id integer primary key,
...
);
create table gerir_posts (
...
post_id integer;
constraint gerir_posts_fk
foreign key(post_id) references(posts.post_id)
on delete cascade,
);
现在,如果您从posts
删除记录,gerir_posts
中引用相同post_id
的所有记录也会被删除。
您可以使用alter table
添加/修改现有表的约束。