我的表格中有两列:varchar(8)
和int
。
我想auto-increment
int column
当我这样做时,我希望将值复制到varchar(8) column
,但是将其填充为0,直到它长达8个字符,因此对于int column
例如,如果3
增加到varchar(8)
,则'00000003'
列将包含varchar(8)
。
我的两个问题是,当'99999999'
列到达00000000
时会发生什么,因为我不想复制?
我将如何在MySQL中执行此操作?
如果我的值可以介于99999999
到{{1}}之间,那么在我用完之前我可以拥有多少个值?
这是我创建一个随机8字符串并检查MySQL是否重复的替代方法。我认为这是一种更好的方法,可以提供更多的价值。
答案 0 :(得分:5)
由于您的格式化列取决于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;
答案 1 :(得分:1)
很简单,如果列是唯一的,它将抛出一个异常,告诉该值已经存在。但如果不是唯一的,在99999999
之后,您将收到错误消息,表示该值被截断。
替代方案,为什么不使用INT AUTO_INCREMENT
?或具有日期/时间组合的自定义ID,例如
YYMMDD-00000
每天最多可记录99999条记录。它将在第二天重置。