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

z18hc3ub  于 2023-04-11  发布在  其他
关注(0)|答案(1)|浏览(100)

在一个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

我想这是可能的,通过触发器,但无论如何,以实现这一点,在一个更干净,更简洁的方式?

gijlo24d

gijlo24d1#

当您将服务器版本更新到10.2+(或任何维护的版本)时,您可以使用带有唯一密钥的Generated Columns来实现您的结果:

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作为唯一索引,而不需要生成的列。

相关问题