是否有可能在MariaDB中使用特定值的唯一元组约束?



在一个有50列的MariaDB 10.1表中,我有两列"code"它是一个由13个随机字符和"maxversion"这是一个tinyint布尔值(0或1)。

是否有可能添加一个唯一键或约束,说每个代码,只有一行可以有一个maxversion = 1?请记住,应该仍然允许有许多行具有相同的代码和maxversion = 0。

例子:

允许:

code          | maxversion
123456789abcd | 1
123456789abcd | 0
123456789abcd | 0
123456789abcd | 0
dcba987654321 | 1
dcba987654321 | 0
dcba987654321 | 0

这是不允许的:

code          | maxversion
123456789abcd | 1
123456789abcd | 1
123456789abcd | 0
123456789abcd | 0
dcba987654321 | 1
dcba987654321 | 0
dcba987654321 | 0

我想这可以通过触发器实现,但是有没有一种更干净、更简洁的方式来实现呢?

当您将服务器版本更新到10.2+(或任何维护版本)时,您可以使用具有唯一键的生成列来实现您的结果:

alter table c
add c_maxversion varchar(13) as (if(maxversion, code, NULL)) unique 

因为NULL不是一个值,所以它没有唯一约束,但是唯一值出现在maxversion= 1的代码中。

裁判:https://dbfiddle.uk/XKEGsIjy

如果你从头开始做这个问题,按照Georg的建议,在maxversion列中使用NULL而不是0,然后你只需要code, maxversion作为唯一索引,而不需要生成列。

相关内容

  • 没有找到相关文章

最新更新