首頁 >資料庫 >mysql教程 >如何在不違反主鍵約束的情況下複製 MySQL 中的行?

如何在不違反主鍵約束的情況下複製 MySQL 中的行?

Linda Hamilton
Linda Hamilton原創
2024-11-11 16:04:02173瀏覽

How to Duplicate Rows in MySQL Without Violating Primary Key Constraints?

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

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn