将SQL主键限制为特定范围

时间:2017-01-02 15:12:33

标签: mysql sql database

我想让我的表的自动增量主键仅在1-12,101-112,201-212等范围内。

这是因为我有一系列重复项目,一组中有12个,然后你得到另一组,我认为让他们以这种方式为主凯进行索引是最容易的。

有可能吗?

2 个答案:

答案 0 :(得分:4)

评论太长了。

这不是接近你正在做的事情的正确方法。如果在“set”中有重复项,则向表中添加一列以指定该集。这是处理数据的明智方法。它使表格中数据的结构更加明确。

然后,如果你真的想使用一个用值编码的主键,那么很难:

select floor((primarykey - 1) / 12) as setvalue

我不建议这样做,因为自动递增的ID不能保证无间隙,但在大多数情况下都能正常工作。

最后,如果你真的想做你提出的建议,你需要一个触发器。这似乎是编写触发器的一个坏理由,因为有更好的选择。

答案 1 :(得分:4)

虽然这不是直接可行的,但你可以通过让一个主键由两个字段组成来实现它 - 一个指定一个组的无限制整数,另一个限制为值1..12的整数指定一个组内的数字。 / p>

但是,这不是一个非常好的方法,因为它必然会在数据库模型之外为主键提供一些含义。这很糟糕,因为它可以很容易地在代码中利用这个含义,从而使重构数据库变得更加困难。