Heim >Datenbank >MySQL-Tutorial >Wie lösche ich doppelte Zeilen und füge einen zusammengesetzten Primärschlüssel in MySQL ohne ROWID hinzu?

Wie lösche ich doppelte Zeilen und füge einen zusammengesetzten Primärschlüssel in MySQL ohne ROWID hinzu?

DDD
DDDOriginal
2024-12-07 06:35:12947Durchsuche

How to Delete Duplicate Rows and Add a Composite Primary Key in MySQL Without ROWID?

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!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn