Syntaxe de LOAD DATA INFILE
<<<
Syntaxe de REPLACE Syntaxe de SELECT
>>>

14.1 Manipulation de données : SELECT , INSERT , UPDATE , DELETE
14 Syntaxe des commandes SQL
 Manuel de Référence MySQL 4.1 : Version Française

Syntaxe de DELETE
Syntaxe de DO
Syntaxe de HANDLER
Syntaxe de INSERT
Syntaxe de LOAD DATA INFILE
->Syntaxe de REPLACE
Syntaxe de SELECT
Sous-sélections ( SubSELECT )
Syntaxe de TRUNCATE
Syntaxe de UPDATE

14.1.6 Syntaxe de REPLACE


REPLACE [LOW_PRIORITY | DELAYED]
    [INTO] tbl_name [(col_name,...)]
    VALUES ({expr | DEFAULT},...),(...),...
ou :

REPLACE [LOW_PRIORITY | DELAYED]
    [INTO] tbl_name
    SET col_name={expr | DEFAULT}, ...
ou :

REPLACE [LOW_PRIORITY | DELAYED]
    [INTO] tbl_name [(col_name,...)]
    SELECT ...
REPLACE fonctionne exactement comme INSERT , sauf que si une vieille ligne dans la table à la même valeur qu'une nouvelle pour un index UNIQUE ou une PRIMARY KEY , la vielle ligne sera effacée avant que la nouvelle ne soit insérée. Syntaxe de INSERT .

En d'autres termes, vous ne pouvez pas accéder aux valeurs de l'ancienne ligne à partir d'une requête REPLACE . Dans quelques vieilles versions de MySQL, il apparaît que c'était possible, mais c'etait un dysfonctionnement qui a été corrigé depuis.

Pour utiliser REPLACE vous devez avoir les privilèges INSERT et DELETE sur la table.

Quand vous utilisez une commande REPLACE , mysql_affected_rows() retournera 2 si une nouvelle ligne en remplace une existante, et cela parce qu'il y aura eu une insertion puis une suppression.

Cela aide à savoir si REPLACE a ajouté ou a remplacé une ligne : Testez si le nombre de lignes affectées est égal à 1 (ajout) ou s'il est égal à 2 (remplacement).

Notez que si vous n'utilisez pas un index UNIQUE ou une PRIMARY KEY , utiliser un REPLACE n'a pas de sens vu que cela revient à utiliser un INSERT . Il devient équivalent à INSERT , car il n'y a pas d'index à utiliser pour déterminer si un nouvelle ligne est un double d'une autre.

Voici quelques détails sur l'algorithme utilisé : Il est aussi utilisé par LOAD DATA ... REPLACE .
  • Insertion de la ligne dans la table
  • Si une erreur de clé dupliqué ou de clé unique ou de clé primaire survient :
    • Annuler les changements de clés
    • Essayer à nouveau d'insérer la clé primaire et unique dans la table

<< Syntaxe de REPLACE >>
Syntaxe de LOAD DATA INFILE Manipulation de données : SELECT , INSERT , UPDATE , DELETE Syntaxe de SELECT