从sql中的多个表中删除

时间:2017-03-30 17:01:36

标签: sql

你好,有人可以帮助我。

我想从多个表中删除。

我想从id_grupo = 6删除grupos。 但是当我删除它时,我想delete from gerir_posts where id_grupo = 6。但是来自postsid_post = 4,来自gerir_posts id_post的内容相同;我也想删除它。

所以我真正想要的是当我删除一个grup时,该grup中的帖子也会被删除。

Picture Tables

这是我的数据库的一个例子。

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

如果这可以帮助

Picture Tables

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添加/修改现有表的约束。