列を列挙せずに MySQL で行を複製する
MySQL では、ユーザーはテーブル内に既存の行のコピーを作成する必要があります。
insert into table select * from table where primarykey=1
のような単純なアプローチを利用したくなるかもしれませんが、この方法では、主キーの一意性により「キー 1 の重複エントリ」エラーが発生します。この問題を回避するための実行可能な解決策には、一時テーブルの作成が含まれます:
create table oldtable_temp like oldtable; insert into oldtable_temp select * from oldtable where key=1; update oldtable_tem set key=2; insert into oldtable select * from oldtable where key=2;
ただし、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 に設定すると、MySQL で自動的に一意の値が割り当てられ、重複が作成されるリスクがなくなります。
挿入時の特異性を確保するには、INSERT INTO ステートメントに LIMIT 1 を追加することを検討してください。
さらに、主キーの値(例では「tmptable_1」)を一時テーブル名に組み込むことをお勧めします。明晰さ。
以上が主キーの制約に違反せずに MySQL で行を複製するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。