MySQL - Déclencheur pour la mise à jour d'une même table après l'insertion
Voici ce que j'essaie de faire:
Quand il y a un nouveau INSERT
dans la table ACCOUNTS
, j'ai besoin de mettre à jour la ligne dans ACCOUNTS
où pk
= NEW.edit_on
par la mise en status='E'
pour désigner les (vieux) compte a été édité.
DELIMITER $$
DROP TRIGGER IF EXISTS `setEditStatus`$$
CREATE TRIGGER `setEditStatus` AFTER INSERT on ACCOUNTS
FOR EACH ROW BEGIN
update ACCOUNTS set status='E' where ACCOUNTS.pk = NEW.edit_on ;
END$$
DELIMITER ;
L'exigence est PAS que je manipule les nouvellement inséré colonne, mais une déjà existant colonne avec pk = NEW.edit_on
Cependant, je ne peux pas mettre à jour le même tableau: Can't update table ACCOUNTS ... already used by the statement that invoked this trigger
S'il vous plaît suggérer une solution de contournement
PS: j'ai déjà passé par La mise à jour de la table de déclenchement après la mise à jour sur la même table, Insérez dans le même tableau déclencher mysql, Mise à jour après déclencheur d'insertion sur la même table et mysql déclencheur d'insertion et de mise à jour après l'insertion sur la table mais ils ne semblent répondre à ma question.
Modifier
ACCOUNTS
Table:
CREATE TABLE `ACCOUNTS` (
`pk` bigint(10) unsigned NOT NULL AUTO_INCREMENT,
`user_id` bigint(9) unsigned NOT NULL,
`edit_on` bigint(10) unsigned DEFAULT NULL,
`status` varchar(1) NOT NULL DEFAULT 'A',
PRIMARY KEY (`pk`) USING BTREE) ENGINE=InnoDB AUTO_INCREMENT=2147483726 DEFAULT CHARSET=latin1
ACCOUNTS
? Si edit_on
est votre clé primaire, alors comment pouvez-vous insérer des doublons?J'ai édité la question d'inclure la structure de la table. Veuillez voir.
si
edit_on = 123
pour une ligne où pk = 456
, cela signifie que 456
est une modification sur 123
. Par conséquent, status
doit être mis à jour pour 'E'
pour 123
Il n'y a pas de
status
colonne dans votre schéma.oups.. désolé de ma mauvaise. veuillez voir le modifier maintenant
OriginalL'auteur th3an0maly | 2012-10-13
Vous devez vous connecter pour publier un commentaire.
Il semble que vous ne pouvez pas faire tout cela dans un déclencheur. Selon le la documentation:
Selon cette réponse, il semble que vous devriez:
Avec une procédure stockée, vous aurez manuellement valider les modifications (insert et update). Je n'ai pas fait cela dans MySQL, mais ce post s'annonce comme un bon exemple.
Non, je crois que vous vous déplacez à l'origine
INSERT
de la requête dans la procédure stockée, et l'appel de la proc au lieu de la requête. Voici la syntaxe de MySQL: dev.mysql.com/doc/refman/5.0/en/call.htmlJe suis un peu confus ici. Voulez-vous dire de déplacer l'insert d'origine dans une procédure et utiliser un déclencheur pour faire la mise à jour, ou de déplacer la tout logique dans une procédure stockée?
Mettre deux états (insert + mise à jour) dans une procédure stockée. Si les instructions sont exécutées avec succès, alors vous
commit
, sinonrollback
changements.de bonnes nouvelles. J'ai mis en place. Il fonctionne très bien. Sauf pour le fait que je ne peux pas obtenir le statut (si ou non le PS a changé toutes les lignes) dans mon JDBC Modèle 🙁
OriginalL'auteur pjama
C'est de cette façon-je mettre à jour une ligne dans le même tableau insérer
code d'activation et l'e-mail sont rangées dans la table USER.
Lors de l'insertion, je ne spécifiez pas de valeur pour le code d'activation, il sera créé à la volée par mysql.
Changement "username" par votre nom d'utilisateur mysql et 'db_name' avec votre nom db.
Oui, la chose importante est de ne pas écrire une mise à JOUR des COMPTES de la partie, qui est ce que MYSQL empêche.
OriginalL'auteur Rangel
Eu le même problème, mais a dû mettre à jour une colonne avec l'id qui a été sur le point d'entrer, donc vous pouvez faire une mise à jour doit être fait AVANT et APRÈS le pas en AVANT a pas d'id, donc j'ai fait ce truc
OriginalL'auteur JCLG
Sur la dernière entrée; c'est un autre truc:
OriginalL'auteur Raymond B
Au lieu de cela vous pouvez utiliser avant d'insérer et d'obtenir un max pkid pour la table en particulier et ensuite mettre à jour le maximum pkid enregistrement de la table.
OriginalL'auteur Chitraranjan Ngangbamcha