有没有办法在MySQL数据库中设置“规则”/索引,所以如果我们有两列: 取消和声明,然后只有其中一个可能充满价值。
因此,如果我们将取消设置为1,那么声称不能为1,如果是另一种方式则不一样吗?
答案 0 :(得分:2)
此处推荐的解决方案是更改架构,使其具有一个列,其状态为cancelled
或claimed
,如果这些是非NULL布尔列,因此只有两种可能的状态。
您可以使用BEFORE UPDATE
触发器执行您想要的操作,但这似乎比已经过于复杂的架构更加复杂。
类似下面的内容,虽然语法可能需要工作,因为我不经常UPDATE
触发:
CREATE TRIGGER `trg_status` BEFORE UPDATE ON your_table
FOR EACH ROW
BEGIN
/* If the claimed was set to 1, set cancelled to 0 */
IF OLD.cancelled = 1 AND NEW.claimed = 1 THEN
SET NEW.cancelled = 0;
/* Or the opposite.... */
ELSEIF OLD.claimed = 1 AND NEW.cancelled = 1 THEN
SET NEW.claimed = 0;
END IF
END