クエリを使用して同じ MySQL テーブル内の行を複製しようとする場合:
insert into table select * from table where primarykey=1
既存の主キー制約により、重複エントリ エラーが発生する可能性があります。この問題を回避するには一時テーブルを使用することもできますが、より簡単な解決策があります。
Leonard Challis からインスピレーションを得て修正された次の手法を使用します。
CREATE TEMPORARY TABLE tmptable_1 SELECT * FROM table WHERE primarykey = 1; UPDATE tmptable_1 SET primarykey = NULL; INSERT INTO table SELECT * FROM tmptable_1; DROP TEMPORARY TABLE IF EXISTS tmptable_1;
説明:
主キーを NULL に設定すると、重複エントリが作成されるリスクがなくなります。さらに、INSERT INTO ステートメントの末尾に LIMIT 1 を追加すると、確実に 1 行のみが挿入されます。
主キー値を一時テーブル名に追加するのは、複数の行が挿入されるときに潜在的な競合を回避するための予防措置です。同時に複製されます。
以上が重複エントリエラーを発生させずに MySQL で行を複製する方法?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。