根据MySQL中的另一列创建计算列

时间:2013-05-09 14:58:34

标签: mysql sql database-design formatting auto-increment

我的表格中有两列: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是否重复的替代方法。我认为这是一种更好的方法,可以提供更多的价值。

2 个答案:

答案 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条记录。它将在第二天重置。