Équivalent MySQL du RowID d'Oracle
Dans MySQL, il n'y a pas d'équivalent direct au rowid d'Oracle. Cependant, il est possible d'obtenir des fonctionnalités similaires en utilisant des variables de session et des sous-requêtes.
Pour supprimer les lignes en double et appliquer une clé primaire composite, vous pouvez utiliser l'approche suivante :
SELECT @rowid:=@rowid+1 as rowid FROM my_table, (SELECT @rowid:=0) as init ORDER BY field1, field2
Cette requête attribuez des rowids à la table, mais notez que les sous-requêtes ne peuvent pas trier les tables que vous essayez de supprimer.
Pour résoudre cette limitation, créez une table temporaire, insérez la plage sous-requête dedans et supprimez-la de la table d'origine en fonction d'une jointure avec la table temporaire à l'aide d'un identifiant de ligne unique :
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
Cette méthode devrait fonctionner pour votre opération ponctuelle sans surcharge significative.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!