Heim >Datenbank >MySQL-Tutorial >Wie simuliere ich die ROWID-Funktionalität von Oracle in MySQL?
MySQL-Äquivalent der RowID von Oracle
In MySQL gibt es kein direktes Äquivalent zur RowID von Oracle. Es ist jedoch möglich, mithilfe von Sitzungsvariablen und Unterabfragen eine ähnliche Funktionalität zu erreichen.
Um doppelte Zeilen zu löschen und einen zusammengesetzten Primärschlüssel zu erzwingen, können Sie den folgenden Ansatz verwenden:
SELECT @rowid:=@rowid+1 as rowid FROM my_table, (SELECT @rowid:=0) as init ORDER BY field1, field2
Diese Abfrage wird Weisen Sie der Tabelle Zeilen-IDs zu. Beachten Sie jedoch, dass Unterabfragen keine Tabellen sortieren können, aus denen Sie löschen möchten.
Um diese Einschränkung zu beheben, erstellen Sie eine temporäre Tabelle und fügen Sie den Bereich ein Fügen Sie eine Unterabfrage ein und löschen Sie sie aus der Originaltabelle basierend auf einem Join mit der temporären Tabelle unter Verwendung einer eindeutigen Zeilenkennung:
CREATE TEMPORARY TABLE duplicates ... INSERT INTO duplicates (rowid, field1, field2, some_row_uid) 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 testruns t, (SELECT @rowid:=NULL, @f1:=NULL, @f2:=NULL) as init ORDER BY field1, field2 DESC; DELETE FROM my_table USING my_table JOIN duplicates ON my_table.some_row_uid = duplicates.some_row_uid AND duplicates.rowid > 0
Diese Methode sollte für Ihren einmaligen Vorgang ohne nennenswerten Mehraufwand funktionieren.
Das obige ist der detaillierte Inhalt vonWie simuliere ich die ROWID-Funktionalität von Oracle in MySQL?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!