gpt4 book ai didi

sql - 检查两列的外键

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

我的两个表的两列之间有一个外键。问题是,我还有一个“已删除”列,如果从我的 UI 中将其设置为 true,我认为该记录已删除。所以我的外键也必须检查该列是否设置为 true 或 false。

有什么办法吗?我需要创建如下规则:“如果第一个表上有任何相关记录,则不允许第二个表的 Deleted 列设置为 false。”

如果上面的内容有点太复杂,这里有一个很长的解释:

**Customer**      **StatusType**
Id Id
Name StatusName
Surname Deleted
StatusId
Deleted

如您所见,我有两个表,Customer 表的“StatusId”包含来自 StatusType 的主键。所以我分配了一个外键来把它们放在一起。

在我的界面中,我从未从数据库中删除任何数据,我只是将“已删除”列设置为“真”。而且我只显示在已删除列上设置为“false”的数据。

所以问题来了:如果 Customer 表上有相关的 Customer.StatusId-StatusType.Id 记录,我的外键不能让 StatusType 表的“deleted”列设置为“false”。

最佳答案

你可以为此使用触发器:

create trigger trg_upd_status before update on StatusType
for each row begin
declare customer_count int;
if new.Deleted = 'true' then
select count(*)
into customer_count
from Customer
where Deleted = 'false';
if (customer_count > 0) then
signal sqlstate '45001'
set message_text = "Not allowed to delete this record";
end if;
end if;
end;
/

这里假设 Deleted 列的数据类型是 varchar,但如果它是数字或有点...,您可以很容易地调整它...

注意这里只检查是否有Customer记录没有被删除。所以这意味着您还必须做相反的事情:如果您取消删除一条 Customer 记录,则相应的 StatusType 记录不应处于已删除状态。如果您更新 Customer 记录并更改 StatusId,则相同。这将是 Customer 表上的触发器...

关于sql - 检查两列的外键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37416949/

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