抱歉的。我重写了这个问题,因为以前的问题很难理解。
我的服务有一个user表。这个表与几个表有关系。
我想从与它相关的多个表中删除数据。
如果我想从与A相关的表中删除除user之外的所有数据(id:1)。

在上面的图像中,我希望删除表B和表C中的用户数据,并保留A和与其相关的所有数据(例如D)。
目前我一个接一个地输入命令。
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命令,则可能出现问题。
对前一个问题的回答很难解决。
我期待着您的回音。谢谢!
发布于 2022-07-06 10:06:57
如果您真的想要将所有相关记录删除到user表,唯一的方法是在delete级联上设置外键约束,但是您必须记住一件事,一旦这样做,它将影响您的一些数据。
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,如下所示
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);发布于 2022-07-07 06:30:35
我不知道这是不是个好办法。
我同样创建了新用户的数据。
与新用户A建立了新的关系。
我以删除现有用户的方式编写了代码。
这个解决方案和我先前问题的答案是一样的。以前,我不能写这段代码,所以我写了一个新的问题。谢谢。!
https://stackoverflow.com/questions/72879468
复制相似问题