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 (Sub SELECT )
Syntaxe de TRUNCATE
Syntaxe de UPDATE

14.1.6 Syntaxe de REPLACE


REPLACE [LOW_PRIORITY | DELAYED]
        [INTO] nom_de_table [(nom_de_colonne,...)]
        VALUES (expression,...),(...),...
ou  REPLACE [LOW_PRIORITY | DELAYED]
        [INTO] nom_de_table [(nom_de_colonne,...)]
        SELECT ...
ou  REPLACE [LOW_PRIORITY | DELAYED]
        [INTO] nom_de_table
        SET col_name=expression, nom_de_colonne=expression,...
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 des 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
    - Lire la ligne coupable dans la table, grâce à la clé double
    - Effacer la ligne coupable
    - 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