Heim >Datenbank >MySQL-Tutorial >Wie lösche ich doppelte Zeilen und füge einen zusammengesetzten Primärschlüssel in MySQL ohne ROWID hinzu?
Alternative zu Oracles ROWID in MySQL zum Löschen doppelter Werte und zum Einsetzen eines zusammengesetzten Primärschlüssels
Oracles ROWID bietet eine eindeutige Kennung für jede Zeile in einem Tisch. In MySQL gibt es jedoch kein genaues Äquivalent zu ROWID.
Für die bereitgestellte Abfrage:
delete from my_table where rowid not in (select max(rowid) from my_table group by field1,field2)
die darauf abzielt, doppelte Zeilen basierend auf bestimmten Spalten zu löschen und dann einen Primärschlüssel festzulegen, In MySQL gibt es verschiedene Ansätze.
Temporäre Tabelle und eindeutige Kennung: Eine Möglichkeit, das gewünschte Ergebnis zu erzielen, ist die Verwendung einer temporären Tabelle Tisch. Erstellen Sie eine temporäre Tabelle mit einer eindeutigen Zeilenkennung (z. B. some_row_uid) und fügen Sie die gewünschten Daten darin ein. Verbinden Sie dann die Originaltabelle mit der temporären Tabelle, um die doppelten Zeilen zu identifizieren und zu löschen.
Sitzungsvariablen: Alternativ können Sitzungsvariablen verwendet werden, um effektiv eine laufende Zählung für jede Zeile zu generieren Erstellen einer Pseudo-ROWID. Dieser Ansatz kann jedoch auf Einschränkungen stoßen, wenn dieselbe Tabelle in Unterabfragen bearbeitet wird.
Beispielabfrage mit temporärer Tabelle (MySQL 8-Syntax):
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);
Dieser Ansatz kann Dies führt zu einem gewissen Mehraufwand aufgrund der Erstellung und Bearbeitung der temporären Tabelle. Für einmalige Vorgänge sollte es eine vernünftige Lösung bieten.
Das obige ist der detaillierte Inhalt vonWie lösche ich doppelte Zeilen und füge einen zusammengesetzten Primärschlüssel in MySQL ohne ROWID hinzu?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!