Rumah >pangkalan data >tutorial mysql >Bagaimana untuk Memadamkan Baris Pendua dan Menambah Kunci Utama Komposit dalam MySQL Tanpa ROWID?
Alternatif kepada ROWID Oracle dalam MySQL untuk Memadam Nilai Pendua dan Mengenakan Kunci Utama Komposit
ROWID Oracle menyediakan pengecam unik untuk setiap baris dalam meja. Dalam MySQL, walau bagaimanapun, tiada persamaan yang tepat dengan ROWID.
Untuk pertanyaan yang disediakan:
delete from my_table where rowid not in (select max(rowid) from my_table group by field1,field2)
yang bertujuan untuk memadamkan baris pendua berdasarkan lajur tertentu dan kemudian mengenakan kunci utama, terdapat pendekatan yang berbeza dalam MySQL.
Jadual Sementara dan Unik Pengecam: Satu cara untuk mencapai hasil yang diingini ialah dengan menggunakan jadual sementara. Buat jadual sementara dengan pengecam baris unik (cth. some_row_uid) dan masukkan data yang dikehendaki ke dalamnya. Kemudian, sertai jadual asal dengan jadual sementara untuk mengenal pasti dan memadamkan baris pendua.
Pembolehubah Sesi: Sebagai alternatif, pembolehubah sesi boleh digunakan untuk menjana kiraan larian bagi setiap baris, dengan berkesan mencipta pseudo-ROWID. Walau bagaimanapun, pendekatan ini mungkin menghadapi had apabila memanipulasi jadual yang sama dalam subkueri.
Contoh Pertanyaan Menggunakan Jadual Sementara (syntax MySQL 8):
CREATE TEMPORARY TABLE duplicates AS SELECT @rowid:=IF(@f1=field1 AND @f2=field2, @rowid+1, 0) as rowid, @f1:=field1 as field1, @f2:=field2 as field2, some_row_uid FROM my_table t, (SELECT @rowid:=NULL, @f1:=NULL, @f2:=NULL) as init ORDER BY field1, field2 DESC; DELETE my_table FROM my_table INNER JOIN duplicates ON my_table.some_row_uid = duplicates.some_row_uid WHERE duplicates.rowid > 0; ALTER TABLE my_table ADD PRIMARY KEY (field1, field2);
Pendekatan ini mungkin memperkenalkan beberapa overhed kerana mencipta dan memanipulasi jadual sementara. Untuk operasi sekali sahaja, ia harus memberikan penyelesaian yang munasabah.
Atas ialah kandungan terperinci Bagaimana untuk Memadamkan Baris Pendua dan Menambah Kunci Utama Komposit dalam MySQL Tanpa ROWID?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!