有没有办法在 MySQL 数据库中设置“规则”/索引,所以如果我们有两列:Canceled 和 Claimed,那么其中只有一个可能被填充值。
所以如果我们将 cancelled 设置为 1,那么如果它是另一种方式,则声明不能是 1 和相同的方式?
有没有办法在 MySQL 数据库中设置“规则”/索引,所以如果我们有两列:Canceled 和 Claimed,那么其中只有一个可能被填充值。
所以如果我们将 cancelled 设置为 1,那么如果它是另一种方式,则声明不能是 1 和相同的方式?
此处推荐的解决方案是更改架构,使其具有一个状态为cancelled
or的列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