如何在mysql/MariaDB中添加整数范围约束?

zpqajqem  于 12个月前  发布在  Mysql
关注(0)|答案(1)|浏览(109)

我有一个表,其中一列是BIGINT,我想在某个值范围上添加一个约束。例如,我想允许0到2M,但阻止2M+1到3M,允许3M+1等。数据库是MariaDB。
希望防止两个数据库在共享资源池中的值重叠。

7lrncoxx

7lrncoxx1#

您可以使用check约束来实现这一点。比如说,

create table test(id bigint, 
 constraint blah check (
  id < 2000000 
  OR (id >3000000 AND id <4000000) 
  OR (id >5000000 AND id <6000000)
 ))

你可以看到它在this Fiddle中工作。(这只是一个例子,因为你想要的模式对我来说并不完全清楚。
正如danblack在评论中指出的那样,你可以使用between和/或mod更有效地编写它。(如果有一个可预测的模式来描述所允许的内容,mod将非常有用。)

create table test(id bigint, 
 constraint blah check (
  id < 2000000 
  OR (id BETWEEN 3000001 AND 4000000) 
  OR (id BETWEEN 5000001 AND 6000000)
 ))

正如Akina在评论中指出的那样,check约束需要MySQL v.8.0.16 v.10.2.1(或更高版本)。
这个问题意味着你要把它添加到一个现有的bigint列中,但是正如Bill Karwin在评论中指出的那样,你可以使用bigint unsigned作为类型,以避免在check约束中排除/处理负数。

相关问题