Bagaimana untuk Menduakan Baris dalam MySQL Tanpa Melanggar Kekangan Utama Utama?

Linda Hamilton
Lepaskan: 2024-11-11 16:04:02
asal
128 orang telah melayarinya

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

Mendua Baris dalam MySQL Tanpa Menghitung Lajur

Dalam MySQL, pengguna menghadapi keperluan untuk mencipta salinan baris sedia ada dalam jadual. Walaupun tergoda untuk menggunakan pendekatan yang mudah seperti:

insert into table select * from table where primarykey=1
Salin selepas log masuk

kaedah ini mencetuskan ralat "Entri pendua untuk kunci 1" disebabkan oleh keunikan kunci utama. Untuk mengelakkan isu ini, penyelesaian yang berdaya maju melibatkan penciptaan jadual sementara:

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;
Salin selepas log masuk

Walau bagaimanapun, pendekatan yang lebih diselaraskan wujud, seperti yang dicadangkan oleh 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;
Salin selepas log masuk

Dengan menggunakan jadual sementara, kita boleh mengelakkan kebimbangan tentang pertindihan kunci utama. Menetapkan kunci utama kepada null membolehkan MySQL menetapkan nilai unik secara automatik, menghapuskan risiko mencipta pendua.

Untuk memastikan ketunggalan semasa pemasukan, pertimbangkan untuk menambahkan LIMIT 1 pada pernyataan INSERT INTO.

Selain itu, adalah disyorkan untuk memasukkan nilai kunci utama (cth., "tmptable_1" dalam contoh) ke dalam nama jadual sementara untuk kejelasan.

Atas ialah kandungan terperinci Bagaimana untuk Menduakan Baris dalam MySQL Tanpa Melanggar Kekangan Utama Utama?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan