2

我的表中有 2 列: avarchar(8)int.

我想要auto-increment并且int column当我这样做时,我想将值复制到 中varchar(8) column,但是用 0 填充它,直到它有 8 个字符长,例如,如果int column递增到3,则该varchar(8)列将包含'00000003'

我的两个问题是,当varchar(8)列到达时会发生什么,'99999999'因为我不想重复?

我将如何在 MySQL 中执行此操作?

如果我的值可以介于00000000to之间99999999,在我用完之前我可以拥有多少个值?

这是我创建随机 8 个字符串并检查 MySQL 是否有重复项的替代方法。我认为这是一种更好的方法,可以允许更多的值。

4

2 回答 2

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;
于 2013-05-09T15:04:20.913 回答
1

很简单,如果该列是唯一的,它将抛出一个异常,告诉该值已经存在。但如果不是唯一的,在99999999您收到该值被截断的错误消息之后。

替代品,为什么不使用INT AUTO_INCREMENT?或带有日期/时间组合的自定义 ID,例如

YYMMDD-00000

这将每天最多记录 99999 条记录。它将在第二天重置。

于 2013-05-09T15:01:41.340 回答