我的表中有两列:avarchar(8)
和aint
。
我想auto-increment
这个int column
列,当我这样做时,我想把这个值复制到varchar(8) column
中,但是用0填充它,直到它有8个字符长,例如,如果int column
增加到3
,varchar(8)
列将包含'00000003'
。
我的两个问题是,当varchar(8)
列到达'99999999'
时会发生什么,因为我不想有重复的?
在MySQL中我该怎么做?
如果我的值可以在00000000
到99999999
之间,那么在用完之前可以有多少个值?
这是我创建一个随机8个字符字符串并检查MySQL是否有重复项的替代方法。我认为这是一个更好的方法,并将允许更多的价值观。
最佳答案
因为格式化列依赖于id列,并且可以从id列派生,所以表的设计违反了3NF。
创建一个包含派生列的视图(请参见sqlfiddle):
CREATE VIEW myview AS
SELECT *, substring(cast(100000000 + id AS CHAR(9)), 2) AS formatted_id
FROM mytable
或者只需在
10000000
开始自动递增,则它将始终为8位数长:ALTER TABLE mytable AUTO_INCREMENT = 10000000;