2011-01-08 3 views
0

est-il un moyen de dire UPDATE items SET qty=10 WHERE **unique key** au lieu de dire UPDATE items SET qty=10 WHERE userID=1 AND listID=10 and itemID=100 sur le tableau ci-dessous?mise à jour MySQL index unique

CREATE TABLE IF NOT EXISTS `items` (
    `userID` int(20) NOT NULL, 
    `listID` int(20) NOT NULL, 
    `itemID` int(20) NOT NULL, 
    `qty` int(10) NOT NULL, 
    UNIQUE KEY `unique` (`userID`,`listID`,`itemID`) 
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; 
+0

Que voulez-vous faire? Vous voulez changer la clé unique pour une ligne OU changer la clé unique de la table entière? –

+0

@Nylons Smile, j'ai mis à jour ma question car il n'a pas fait de sens – afarazit

+0

Merci pour la clarification –

Répondre

1

Je ne suis pas 100% sûr de ce que vous demandez, mais si vous voulez savoir si vous pouvez nommer l'index unique dans la clause WHERE et de fournir une sorte de valeur combinée unique à trouver la ligne tu veux, la réponse est non. Si vous voulez utiliser l'index, vous devez spécifier les trois valeurs de colonne séparées comme dans votre exemple et laisser MySQL déterminer si c'est le meilleur index à utiliser (dans ce cas, la réponse sera oui).

0

La seule façon que je connaisse est:

UPDATE items 
SET qty=10 
WHERE (userID, listID, itemID) = (1, 10, 100) 

Est-ce ce que vous cherchez?

La syntaxe est équivalente à celle utilisant AND, juste un peu plus compact. Cela ne garantit pas que l'index sera utilisé bien que cela soit probable en utilisant ceci ou votre syntaxe.