首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何删除相关表数据

如何删除相关表数据
EN

Stack Overflow用户
提问于 2022-07-06 07:29:58
回答 2查看 70关注 0票数 0

抱歉的。我重写了这个问题,因为以前的问题很难理解。

我的服务有一个user表。这个表与几个表有关系。

我想从与它相关的多个表中删除数据。

如果我想从与A相关的表中删除除user之外的所有数据(id:1)。

在上面的图像中,我希望删除表B和表C中的用户数据,并保留A和与其相关的所有数据(例如D)。

目前我一个接一个地输入命令。

代码语言:javascript
复制
delete from B where userId=1;
(await this.repository<B>.delete({userId:1});)
delete from C where userId=1;
(await this.repository<C>.delete({userId:1});)

但我不知道是否有办法一次把它全部删除。因为在我的服务中,可以添加和删除更多的表。如果未添加或删除delete命令,则可能出现问题。

对前一个问题的回答很难解决。

我期待着您的回音。谢谢!

EN

回答 2

Stack Overflow用户

发布于 2022-07-06 10:06:57

如果您真的想要将所有相关记录删除到user表,唯一的方法是在delete级联上设置外键约束,但是您必须记住一件事,一旦这样做,它将影响您的一些数据。

代码语言:javascript
复制
CREATE TABLE user (
    id_u INT AUTO_INCREMENT PRIMARY KEY,
    name VARCHAR(10)
)ENGINE=INNODB;
INSERT INTO user(name) VALUES('a'),('b'),('c'),('d'),('e');

CREATE TABLE a (
    id_a INT AUTO_INCREMENT PRIMARY KEY,
    name_a VARCHAR(10),
    id_u INT,
    CONSTRAINT F_ID_UA_ODC FOREIGN KEY(id_u) REFERENCES user(id_u) ON DELETE CASCADE 
)ENGINE=INNODB;
INSERT INTO a(id_u, name_a) VALUES(1,'1a'),(2,'2b'),(3,'3c'),(1,'4a'),(4,'5d');

CREATE TABLE b (
    id_b INT AUTO_INCREMENT PRIMARY KEY,
    name_b VARCHAR(10),
    id_u INT,
    CONSTRAINT F_ID_UB_ODC FOREIGN KEY(id_u) REFERENCES user(id_u) ON DELETE CASCADE 
)ENGINE=INNODB;
INSERT INTO b(id_u,name_b) VALUES(1,'1b'),(2,'2b'),(3,'3c'),(1,'4a'),(4,'5d');

SELECT u.id_u, a.id_a, u.name, a.name_a FROM user u JOIN a USING(id_u);
SELECT u.id_u, b.id_b, u.name, b.name_b FROM user u JOIN b USING(id_u);

DELETE FROM user WHERE id_u = 1;

SELECT u.id_u, a.id_a, u.name, a.name_a FROM user u JOIN a USING(id_u);
SELECT u.id_u, b.id_b, u.name, b.name_b FROM user u JOIN b USING(id_u);

但是,如果您只想删除所有相关的表,而不影响父表的话。您可以执行一个连接来删除clouse,如下所示

代码语言:javascript
复制
DELETE a,b FROM USER u JOIN b ON(u.id_u = b.id_u) JOIN a ON(u.id_u = a.id_u) WHERE u.id_u = 1;

SELECT * FROM user;
SELECT u.id_u, a.id_a, u.name, a.name_a FROM user u JOIN a USING(id_u);
SELECT u.id_u, b.id_b, u.name, b.name_b FROM user u JOIN b USING(id_u);
票数 1
EN

Stack Overflow用户

发布于 2022-07-07 06:30:35

我不知道这是不是个好办法。

我同样创建了新用户的数据。

与新用户A建立了新的关系。

我以删除现有用户的方式编写了代码。

这个解决方案和我先前问题的答案是一样的。以前,我不能写这段代码,所以我写了一个新的问题。谢谢。!

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72879468

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档