在 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中文網其他相關文章!