MySQL comportement de DOUBLE de la CLÉ de mise à JOUR pour plusieurs champs UNIQUES
De MySQL 4.1.0-delà, il est possible d'ajouter ON DUPLICATE KEY UPDATE
déclaration de spécifier le comportement lorsque les valeurs inséré (avec INSERT
ou SET
ou VALUES
) sont déjà dans la table de destination.w.r.t. PRIMARY KEY
ou certains UNIQUE
champ. Si la valeur pour PRIMARY KEY
ou certains UNIQUE
domaine sont déjà dans le tableau, INSERT
est remplacé par un UPDATE
.
- Comment
ON DUPLICATE KEY UPDATE
comporter en cas il y a plusieurs
UNIQUE
champs dans ma table ? - Peut, j'ai une mise à jour seulement, si
UNIQUE
champ est assorti ? - Puis-je avoir une mise à jour uniquement si les deux
UNIQUE
champs sont mis en correspondance simultanément ?
OriginalL'auteur octoback | 2013-05-04
Vous devez vous connecter pour publier un commentaire.
Envisager
si a et b sont
UNIQUE
champs,UPDATE
se produit sura = 1 OR b = 2
. Aussi lorsque la conditiona = 1 OR b = 2
est rencontré par deux ou plusieurs entrées, la mise à jour est effectuée une seule fois.Ex ici le tableau de la table avec l'Id et le Nom
UNIQUE
champsSi la requête est
puis, nous avons
qui viole l'unicité des Id et le Nom. Maintenant, avec
nous obtenons
Comportement sur plusieurs touches est la suivante
UPDATE
dansON DUPLICATE KEY UPDATE
est effectuée si l'un desUNIQUE
champ est égal à la valeur insérée. Ici,UPDATE
est effectuée surId = 1 OR Name = C
. Il est équivalent àCe que si je veux une mise à jour, pour l'une ou l'autre touche
Pouvez utiliser
UPDATE
déclaration avecLIMIT
mot-cléqui donnera
Ce que si je veux une mise à jour uniquement si les valeurs pour les deux clés sont appariés
La seule solution est de
ALTER TABLE
et de faire de laPRIMARY KEY
(ou de l'unicité) de travailler sur les deux champs.Maintenant, sur
nous obtenons
car aucun duplicata (sur les deux touches) est trouvé.
Est-il possible d'avoir une contrainte unique sur la 2ème colonne, mais il a de sorte qu'il n'affecte pas cette clé en double opération de mise à jour? Cela signifie que l'insertion ou la mise à jour échoue si l'unique contrainte n'est pas respectée.
OriginalL'auteur octoback
comment MySQL se comporter ...
Il se comporte comme prévu, c'est-exécute SUR un DOUBLE de la CLÉ de la clause.
Peut, j'ai une mise à jour pour...
En réalité, vous n'avez qu'une SUR DOUBLE de la CLÉ de la clause, si vous avez besoin de mettre un peu de code pour différencier lesquels la contrainte a été impliqué. Fortunatelly, c'est possible. La seule chose que vous devez savoir, l'ordre d'attribution des questions, et vous pouvez assigner plusieurs fois. Imaginons que vous ayez contrainte unique sur a et b, et que vous souhaitez mettre à jour c seulement si l'originalité est en cause:
...
Mise à JOUR de CLÉ c = SI(a = VALEURS(a) et de b <> les VALEURS de(b), les VALEURS(c), c), b = VALEURS(b)
mais si vous changez l'ordre des affectations de la deuxième condition à l'intérieur de si sera toujours faux.
Voir 2.
OriginalL'auteur newtover