gpt4 book ai didi

mysql - 如何将列设置为唯一,但仅在某种情况下?

转载 作者:行者123 更新时间:2023-11-28 23:18:01 25 4
gpt4 key购买 nike

我有一个表,其中有一个 ID、一列“A”和其他列。如果 A 设置为“this”,则不能有另一个 ID 的 A 列设置为“this”。否则,该 ID 可能有许多条目,并为“A”列设置了多个值。

例如:

ID | A | other columns

这是允许的:

1 | that | ...
1 | something | ...
1 | foo | ...

但这不是:

1 | this | ...
1 | that | ...

(3 个点表示我们那里有什么数据并不重要)

我在 MySQL Workbench 上执行此操作,因此如果您的回答能告诉我如何在 MySQL Workbench 上执行此操作,我们将不胜感激。

最佳答案

您需要创建一个触发器,该触发器将在每个 INSERT 或 UPDATE 语句(针对每一行)之前触发,并检查您的约束是否有效以及是否可以添加该行。 AFAIK 在 MySQL 中你实际上需要有两个触发器(每个操作一个),但是没有什么可以阻止你在一个过程中包装你的验证并从两个触发器调用它。

我会给你进一步调整的启动器。

1.创建插入触发器

DELIMITER //
DROP TRIGGER IF EXISTS insert_trg //
CREATE TRIGGER insert_trg
BEFORE UPDATE ON yourtable
FOR EACH ROW
BEGIN
CALL yourprocedure(<arguments here>);
END //
DELIMITER ;

2.创建类似于插入触发器的更新触发器

3.使用验证码创建过程


验证约束的 SQL 类似于:

SELECT *
FROM yourtable yt
WHERE yt.id = NEW.id -- replace with arguments passed to procedure
AND yt.A = NEW.A -- same as above

您很可能需要用 EXISTS 语句和 if 语句将其包装起来


一些知识来源:

关于mysql - 如何将列设置为唯一,但仅在某种情况下?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43006533/

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