MySQL设置了一个规则,确保两列中只有一列可以填充值

时间:2012-12-29 19:53:18

标签: mysql

有没有办法在MySQL数据库中设置“规则”/索引,所以如果我们有两列: 取消和声明,然后只有其中一个可能充满价值。

因此,如果我们将取消设置为1,那么声称不能为1,如果是另一种方式则不一样吗?

1 个答案:

答案 0 :(得分:2)

此处推荐的解决方案是更改架构,使其具有一个列,其状态为cancelledclaimed如果这些是非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