在一个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
我想这是可能的,通过触发器,但无论如何,以实现这一点,在一个更干净,更简洁的方式?
1条答案
按热度按时间gijlo24d1#
当您将服务器版本更新到10.2+(或任何维护的版本)时,您可以使用带有唯一密钥的Generated Columns来实现您的结果:
因为
NULL
不是一个值,所以它没有唯一的约束,但是在maxversion
= 1的代码中会出现唯一的值。参考:https://dbfiddle.uk/XKEGsIjy
如果你从头开始做这个问题,按照Georg的建议,在
maxversion
列中使用NULL
而不是0
,然后你就有了code, maxversion
作为唯一索引,而不需要生成的列。