ホームページ >データベース >mysql チュートリアル >重複エントリエラーを発生させずに MySQL で行を複製する方法?

重複エントリエラーを発生させずに MySQL で行を複製する方法?

Barbara Streisand
Barbara Streisandオリジナル
2024-11-14 21:50:02849ブラウズ

How to Duplicate Rows in MySQL Without a Duplicate Entry Error?

MySQL での行の複製: 代替ソリューション

クエリを使用して同じ 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;

説明:

  1. 一時テーブル (tmptable_1) が作成され、複製する必要な行が設定されます。
  2. 一時テーブルの主キー列は NULL に設定されます。これにより、MySQL は自動的に一意の値を割り当て、キーの重複を回避できます。
  3. 一時テーブルの行が元のテーブルに挿入されます。
  4. 一時テーブルは削除されます。

主キーを NULL に設定すると、重複エントリが作成されるリスクがなくなります。さらに、INSERT INTO ステートメントの末尾に LIMIT 1 を追加すると、確実に 1 行のみが挿入されます。

主キー値を一時テーブル名に追加するのは、複数の行が挿入されるときに潜在的な競合を回避するための予防措置です。同時に複製されます。

以上が重複エントリエラーを発生させずに MySQL で行を複製する方法?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。