Heim >Datenbank >MySQL-Tutorial >Wie simuliere ich die ROWID-Funktionalität von Oracle in MySQL?

Wie simuliere ich die ROWID-Funktionalität von Oracle in MySQL?

Linda Hamilton
Linda HamiltonOriginal
2024-12-01 00:24:19234Durchsuche

How to Simulate Oracle's ROWID Functionality 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!

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