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.
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
MySQL Reference Manual that can
be found at dev.mysql.com. The original
Reference Manual is in English, and
this translation is not necessarily
as up to date as the English version.
|