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

标签 mysql

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

那么如果我们将 cancel 设置为 1,那么 claimed 就不能为 1 并且如果是其他方式则相同?

最佳答案

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

关于MySQL 设置了一个规则,确保两列中只有一列可以填充值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14085356/

相关文章:

c# - Entity Framework - 在 DeleteObject 上访问数据库的次数

php - 语法错误或访问冲突 : 1055 Expression #17 in group by

C# UWP MySql BulkLoader - 无法使用 csv 加载数据

php - html 和 php 表单到数据库输入 0000-00-00 作为日期,而不是所选的 html5 日期选择器日期

php - 知道哪一列有结果

mysql - 从数据文件中恢复mysql数据库

PHP echo 不显示在 HTML <h3> 标签内

php - MySQL - 获取星期几

mysql - 超过mysql每小时最大连接数

mysql - 如何避免对带有 order by 语句的前缀查询的 mysql 复合索引进行文件排序?