したがって、1つの列にauto_increment機能を使用させたいが、同じテーブル内の別の列にも同じ値を持たせたいですか?
この機能が必要になる理由は考えられません。おそらく、あなたはあなたが達成しようとしていることを説明することができます、そして私は別の解決策を提案することができますか?
この場合、トリガーは機能しません。これは鶏が先か卵が先かという問題です:
-
AFTER
の列の値を変更することはできません 引き金。 - ただし、
BEFORE
の場合、自動インクリメント値はまだ設定されていません。 トリガーが実行されます。
また、MySQL 5.7 GENERATED
を使用しても機能しません 列:
CREATE TABLE MyTable (
id INT AUTO_INCREMENT PRIMARY KEY,
why_would_you_want_this INT GENERATED ALWAYS AS (id)
);
ERROR 3109 (HY000): Generated column 'why_would_you_want_this'
cannot refer to auto-increment column.
単一のSQLステートメントでそれを行うことはできません。 INSERT
する必要があります 行を入力し、すぐにUPDATE
を実行します 2番目の列を同じ値に設定します。
CREATE TABLE MyTable (
id INT AUTO_INCREMENT PRIMARY KEY,
why_would_you_want_this INT
);
INSERT INTO MyTable () VALUES ();
UPDATE MyTable SET why_would_you_want_this = LAST_INSERT_ID()
WHERE id = LAST_INSERT_ID();
または、AUTO_INCREMENT
以外のメカニズムを使用してID値を生成することもできます。 (たとえば、Memcachedインクリメントキー)。次に、両方の列に新しい値を挿入できます:
INSERT INTO MyTable (id, why_would_you_want_this) VALUES ($gen_id, $gen_id);