1

現在、自動インクリメントされている id 列を持つテーブルがあり、そこに一意の制約がある tracking_code 列があります。

現在、tracking_code はサインアップする人によって提供されていますが、クライアントは、tracking_code が自動生成され、変更可能であることを望んでいます。つまり、ユーザーがサインアップすると、tracking_code が自動生成されますが、そのコードが一意である限り、ユーザーはそのコードを別のものに更新できます。

MySQL でこのようなことを行うことは可能ですか (レコードが挿入された後にのみ存在する自動インクリメント ID に文字列を追加します)、または mysql でそれを行う別の方法があります:

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

4

2 に答える 2

2

トラッキング ID を自動インクリメントに設定すると、必要に応じて機能します。挿入時にトラッキング ID の値を指定しない場合、トラッキング ID は自動生成され、指定した場合は指定された値が設定されます。一意の制約を追加することを忘れないでください。

于 2012-04-04T09:22:00.620 に答える
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ます。

于 2012-04-04T09:28:55.543 に答える