Puis-je mettre à jour le juste ajouté de la ligne à l'aide de MySQL déclencheurs
La valeur par défaut initiale de la valeur d'une colonne dans ma base de données est la même que la ligne de l'auto-incrémenté id. Je suis en train d'utiliser des déclencheurs pour le régler.
CREATE TRIGGER `default_order_value`
AFTER INSERT ON `clusters`
FOR EACH ROW
BEGIN
UPDATE `clusters` SET `order` = NEW.id WHERE `id` = NEW.id;
END
Mais cela empêche de jeter une erreur de syntaxe
#1064 - Vous avez une erreur dans votre syntaxe SQL; consultez le manuel qui correspond à votre versions du serveur MySQL pour la bonne syntaxe à utiliser près de " à la ligne 5
J'ai essayé toutes sortes de permutations de ce avec pas de chance. N'importe qui peut voir ce que je fais mal?
OriginalL'auteur wheresrhys | 2012-02-19
Vous devez vous connecter pour publier un commentaire.
Comme zerkms dit, vous avez besoin de changer le séparateur. Mais puisque vous ne l'utilisez 1 ligne de code, vous n'avez pas besoin de début et de FIN. Et de cette façon, vous n'avez pas besoin de changer le séparateur soit
Puisque vous obtenez une erreur vous ne pouvez pas mettre à jour la ligne, je suggère ce qui suit:
Ne PAS effectuer la mise à jour de la requête. Par défaut la valeur de la commande = la valeur de l'ID. Ainsi, lorsque la valeur de la commande changements, vous pouvez mettre à jour correctement.
Si vous êtes à la demande les données avec php, faire quelque chose comme ceci:
Après vous avez besoin de la mise à jour, vous avez de la valeur correcte.
Je suis maintenant l'erreur suivante
1442 Can't update table 'clusters' in stored function/trigger because it is already used by statement which invoked this stored function/trigger.
- des idées pourquoi? Il arrive même avec un très simpleINSERT INTO clusters( `name`) VALUES ('qweqwe')
C'est parce que vous ne pouvez pas modifier la ligne que vous venez d'insérer 🙂
donc suis-je en droit de penser que la tâche que je veux faire n'est pas possible sans actualisant la base de données pour récupérer le dernier id inséré?
J'ai mis à jour ma réponse, peut-être que ça aide?
OriginalL'auteur Rene Pot
Je ne pense pas que vous pouvez le faire. Un
AFTER INSERT
le déclencheur ne peut pas modifier de la même table, ni par l'émission d'uneUPDATE
ni par quelque chose comme ceci:qui entraîne cette erreur:
Vous ne pouvez pas utiliser un
BEFORE INSERT
déclencheur car alors laNEW.id
n'est pas connu (si vous modifiez le ci-dessus, leorder
colonne0
valeur après l'Insertion.Ce que vous pouvez faire, est d'utiliser une transaction:
Mon point est que vous ne pouvez pas utiliser un déclencheur pour cela. Vous devrez remplacer votre Insert avec cette ensemble de la transaction (vous pouvez mettre ceci à l'intérieur d'une procédure stockée si vous le souhaitez).
Exemple de la façon d'écrire de la SPs: Transaction avec une Procédure Stockée dans le Serveur MySQL
OriginalL'auteur ypercubeᵀᴹ
Vous obtenez le message d'erreur parce que mysql traite
;
en ligne 5 comme la fin de votre déclencheur de la déclaration, ce qui conduit évidemment à l'erreur de syntaxe.Si vous avez besoin de redéfinir séparateur avant de spécifier la détente du corps:
OriginalL'auteur zerkms
Vous pouvez créer juste AVANT DÉCLENCHEUR d'INSERTION, il fonctionne comme ceci:
même que ci-dessous, nous utilisons
OriginalL'auteur vishal
Cela a fonctionné pour moi:
OriginalL'auteur Wayne Strickland