La solution
se trouve probablement dans la fonction REPLACE
de MySQL (qui existe également dans d'autres SGBD SQL).
Comme expliqué par la documentation MySQL, celle-ci
fonctionne exactement comme INSERT,
mais fera l'équivalent d'un UPDATE
(pour simplifier) dans le cas où la table dispose d'un
index UNIQUE (un PRIMARY
KEY sur id par exemple).
Sa syntaxe est donc similaire à celle de INSERT
:
REPLACE INTO dvd (id, titre, annee, region)
VALUES (17, 'Mary of Scotland', 1936, 1), (18, 'Marie Stuart',
1936, 2);
id |
titre |
annee |
region |
... |
... |
... |
... |
17 |
'Marie of Scotland' |
1937 |
1 |
37 |
'Terminator vs. Casimir' |
2004 |
2 |
Ce qui donnera :
id |
titre |
annee |
region |
... |
... |
... |
... |
17 |
'Mary of Scotland' |
1936 |
1 |
18 |
'Marie Stuart' |
1936 |
2 |
37 |
'Terminator vs. Casimir' |
2004 |
2 |
|
Forum |
|
Réagissez
dans les forums
de JDN Développeurs
|
Dans le cas où l'entrée n'existe pas déjà,
il y a une insertion des plus classiques... Le nombre de lignes
sera ensuite 1 s'il y a insertion simple, et 2 s'il y a remplacement
(effacement d'un ligne et insertion d'une autre).
Vous combinez ainsi en une seule requête les requêtes
DELETE et INSERT
nécessaire au même travail, le tout sans devoir
verrouiller la base par précaution.
|