3

有没有办法在 MySQL 数据库中设置“规则”/索引,所以如果我们有两列:Canceled 和 Claimed,那么其中只有一个可能被填充值。

所以如果我们将 cancelled 设置为 1,那么如果它是另一种方式,则声明不能是 1 和相同的方式?

4

1 回答 1

2

此处推荐的解决方案是更改架构,使其具有一个状态为cancelledor的列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
于 2012-12-29T19:55:52.270 回答