MySQL - Déclencheur pour mettre à jour la même table après l'opération d'insertion
P粉419164700
P粉419164700 2023-10-16 20:01:46
0
2
563

Voici ce que j'essaie de faire :

Quand il y en a un nouveauINSERT到表ACCOUNTS中时,我需要通过设置status='E'phpcnend 来更新ACCOUNTS中的行,其中pk=NEW.edit_oncphpcn 来表示特定(旧)帐户已被编辑。

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_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粉419164700
P粉419164700

répondre à tous (2)
P粉063862561

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 pouractivationCode, elle sera créée dynamiquement par MySQL.

Changezusername更改为您的 MySQL 用户名,并将db_namepar 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
    P粉262113569

    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.

      Derniers téléchargements
      Plus>
      effets Web
      Code source du site Web
      Matériel du site Web
      Modèle frontal
      À propos de nous Clause de non-responsabilité Sitemap
      Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!