【问题标题】:Insert unique value based on auto-incremented column根据自增列插入唯一值
【发布时间】:2012-04-17 23:48:44
【问题描述】:

我目前有一个表,其中 id 列正在自动递增,然后有一个 tracking_code 列,它具有唯一约束。

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

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

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

【问题讨论】:

  • 您真的,真的需要一个专门的专栏来跟踪吗?你不能只使用id吗?如果没有,我会在插入后使用触发器来更改跟踪值。不知道这是否是最好的解决方案,但它会工作

标签: mysql


【解决方案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 列时才有效。

【讨论】:

  • 我添加了一个只计算插入的额外表,这样自动增量解决方案更加独立于数据库。
【解决方案2】:

您可以将跟踪 ID 设置为自动递增,它会根据您的需要工作。当您在插入期间未提供跟踪 ID 值时,将自动生成跟踪 ID,并且当您这样做时,将设置提供的值。只是不要忘记添加唯一约束。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-10-10
    • 1970-01-01
    • 2021-10-18
    • 2021-02-28
    • 2018-05-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多