根据自动递增列插入唯一值

时间:2012-04-04 09:17:26

标签: mysql

我目前有一个带有自动增量的id列的表,然后有一个对其有唯一约束的tracking_code列。

目前,tracking_code由注册人提供,但现在客户希望自动生成tracking_code,但也可以更改。 换句话说,在用户注册的地方,自动生成tracking_code,但允许用户将该代码更新为其他任何内容,只要它保持唯一。

是否可以在MySQL中执行类似的操作(将字符串附加到仅在插入记录后存在的自动增量id)或者是否有另一种方法在mysql中执行此操作:

INSERT INTO mytable(...,tracking_code,...)VALUES(...,'foo-'+ id +' - bar',...)

2 个答案:

答案 0 :(得分:2)

您可以将跟踪ID设置为自动递增,并且可以根据需要使用。如果在插入期间未提供跟踪ID的值,则会自动生成跟踪ID,并且当您执行时,将设置提供的值。只是不要忘记添加唯一约束。

答案 1 :(得分:1)

你可以这样做:

INSERT INTO mytable
  (..., tracking_code, ...)
VALUES (
  ...,
  CONCAT(
    'foo-',
    (
        SELECT
            AUTO_INCREMENT
        FROM
            information_schema.TABLES
        WHERE
            TABLE_SCHEMA = 'database'
        AND TABLE_NAME = 'mytable'
    ),
    '-bar'
  ),
  ...
)

或者

INSERT INTO mytable
SET tracking_code = CONCAT(
    'foo-',
    (
        SELECT
            AUTO_INCREMENT
        FROM
            information_schema.TABLES
        WHERE
            TABLE_SCHEMA = 'database'
        AND TABLE_NAME = 'mytable'
    ),
    '-bar'
),
...

显然只有AUTO_INCREMENT列才有效。