次のようなテーブル スキーマがあります。
CREATE TABLE statuses
(
id int,
lang int,
name varchar(30)
);
ALTER TABLE `statuses` ADD PRIMARY KEY (`id`, `lang`) ;
ALTER TABLE `statuses` CHANGE `id` `id` INT NOT NULL AUTO_INCREMENT ;
このテーブルには、異なる言語である可能性があるいくつかのデータが保持されます。したがって、同じデータに対応するが異なる言語のすべての行に、同じであるid
が異なるlang
. このように、二重キーは一意です。次のクエリを使用して、値を挿入および更新したいと考えています。
INSERT INTO statuses (id, lang, name)
VALUES (null,1,'Third'),(null,2,'Trzeci')
ON DUPLICATE KEY UPDATE name = VALUES(name)
値を更新したい場合は問題なく動作しますが、実際に何かを挿入したい場合は壊れます。自動インクリメント機能により、id
新しく作成された行ごとに列に異なる値が設定されるためです。
ここで SQLfiddle を確認できます: http://sqlfiddle.com/#!2/62fbfd/1
テーブル構造またはSQLクエリを修正してジョブを実行することは可能ですか、または最初に複数のクエリを使用して最初の行を挿入して新しいことを示しid
、その後、この新しく作成された残りの行を挿入する必要がありid
ますか? 私は 1 つのクエリのみを使用することを好むので、ここで質問します。