Maison  >  Questions et réponses  >  le corps du texte

MySQL - Déclencheur pour mettre à jour la même table après l'opération d'insertion

Voici ce que j'essaie de faire :

Quand il y en a un nouveau INSERT 到表 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 pas mon opérationune colonne nouvellement insérée, mais une colonnedéjà existante, où pk = NEW.edit_onpk = 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éclencheur

Veuillez 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 .

Modifier

ACCOUNTS

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
🎜🎜🎜
P粉419164700P粉419164700369 Il y a quelques jours655

répondre à tous(2)je répondrai

  • P粉063862561

    P粉0638625612023-10-17 18:44:15

    C'est ainsi que je mets à jour les lignes du même tableau lors de l'insertion

    Lignes en

    activationCodeemail 是表 USER. Lors de l'insertion, je n'ai pas spécifié de valeur pour activationCode, elle sera créée dynamiquement par MySQL.

    Changez username 更改为您的 MySQL 用户名,并将 db_name par le nom de votre base de données.

    CREATE DEFINER=`username`@`localhost` 
           TRIGGER `db_name`.`user_BEFORE_INSERT` 
           BEFORE INSERT ON `user` 
           FOR EACH ROW
             BEGIN
                SET new.activationCode = MD5(new.email);
             END

    répondre
    0
  • P粉262113569

    P粉2621135692023-10-17 17:55:58

    Il semble que vous ne puissiez pas faire tout cela avec un déclencheur. D'après Documentation :

    D'après cette 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, mais cet article semble être un bon exemple.

    répondre
    0
  • Annulerrépondre