gpt4 book ai didi

mysql - 从具有分层数据的表中删除记录

转载 作者:搜寻专家 更新时间:2023-10-30 23:34:45 27 4
gpt4 key购买 nike

我在 SQL 数据库中有两个表,其字段如下:

Table A: Key | Id1 | Name

Table B: Key | Id2 | Idx1 | Idx2 | Id1

表 B 存储分层数据。表 B 中的字段 Id1 链接回表 A 中的 Id1,并设置 FK,以便删除表 1 中的项目(比如 Id1=1)将删除表 B 中的所有项目(具有相同的 Id1)(即。级联)。

我想做的是,对于表 B 中删除了某个 Id1 的记录(由于表 A 中具有相同 Id1 的记录),表 B 中具有相同 Id2 的所有记录也被删除。

例如……

Table A:
1,1,A
2,2,B
3,3,C

Table B:
1,1,0,0,1
2,1,0,1,2
3,1,0,2,3
4,1,1,0,3
5,1,1,1,2
6,2,0,0,3

我现在从表 A 中删除项目 1(Id1=1),这样:

Table A:
2,2,B
3,3,C

Table B:
6,2,0,0,3

这可以在 SQL 中自动完成(例如,通过触发器等)还是我需要在数据库外部“手动”处理它?<​​/p>

最佳答案

在这种情况下,您可以利用 SQL Server 的 DELETE CASCADE 功能。

如果您在 SQL 中的两个表之间有父子映射,您可以删除子表记录以及删除父记录的单个查询。

要实现此目的,您必须在建立表之间的关系时启用删除级联,方法如下:

CREATE TABLE products
( product_id INT PRIMARY KEY,
product_name VARCHAR(50) NOT NULL,
category VARCHAR(25)
);

CREATE TABLE inventory
( inventory_id INT PRIMARY KEY,
product_id INT NOT NULL,
quantity INT,
min_level INT,
max_level INT,
CONSTRAINT fk_inv_product_id
FOREIGN KEY (product_id)
REFERENCES products (product_id)
ON DELETE CASCADE
);

或者,如果您已经定义了表数据,则可以使用以下方法来执行此操作:

ALTER TABLE dbo.T2
DROP CONSTRAINT FK_T1_T2 -- or whatever it's called

ALTER TABLE dbo.T2
ADD CONSTRAINT FK_T1_T2_Cascade
FOREIGN KEY (EmployeeID) REFERENCES dbo.T1(EmployeeID) ON DELETE CASCADE

或者如果您使用的是 MYSQL(因为它没有在问题中提及),您可以按照以下 StackOverflow 帖子中的说明进行操作:

MySQL foreign key constraints, cascade delete

关于mysql - 从具有分层数据的表中删除记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44491798/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com