Voici ce que j'essaie de faire :
Quand il y en a un nouveauINSERT
到表ACCOUNTS
中时,我需要通过设置status='E'phpcnend 来更新
ACCOUNTS
中的行,其中pk
=NEW.edit_on
cphpcn 来表示特定(旧)帐户已被编辑。
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 ;
nécessitenon pasmon opérationunecolonne nouvellement insérée, maisune colonnedéjà existante, oùpk = NEW.edit_on
pk = NEW.edit_on
< /p>无法更新表 ACCOUNTS ... 已被调用此触发器的语句使用
Cependant, je n'arrive pas à mettre à jour la même table :
Impossible de mettre à jour la table COMPTES... déjà utilisée par l'instruction qui a appelé ce déclencheurVeuillez suggérer une solution
PS : j'ai effectué la mise à jour de la table dans le déclencheur après la mise à jour sur la même table, l'insertion dans la même table du déclencheur mysql, la mise à jour sur la même table en utilisant le déclencheur après l'insertion et l'insertion et la mise à jour du déclencheur mysql après l'insertion sur la table mais ils ne semblent pas répondre à ma question .
ModifierACCOUNTS
COMPTES
Tableau :
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
C'est ainsi que je mets à jour les lignes du même tableau lors de l'insertion
Lignes enactivationCode
和email
是表USER
. Lors de l'insertion, je n'ai pas spécifié de valeur pouractivationCode
, elle sera créée dynamiquement par MySQL.Changez
username
更改为您的 MySQL 用户名,并将db_name
par le nom de votre base de données.Il semble que vous ne puissiez pas faire tout cela avec un déclencheur. D'aprèsDocumentation:
D'aprèscette réponse, il semble que vous devriez :
Avec les procédures stockées, vous validerez les modifications (insertions et mises à jour) manuellement. Je ne l'ai pas encore fait dans MySQL, maiscet articlesemble être un bon exemple.