有没有办法在MySQL数据库中设置"规则"/索引,所以如果我们有两列: 取消并认领,则只能填充其中之一的价值。
因此,如果我们将 cancel 设置为 1,那么声明不能是 1,如果是另一种方式,则相同?
这里推荐的解决方案是更改架构,使其具有一列,其状态为cancelled
或claimed
,如果这些是非 NULL 布尔列,因此只有 2 种可能的状态。
您可以使用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