Mysql
 sql >> Base de données >  >> RDS >> Mysql

mettre à jour la colonne de la table après avoir inséré un nouvel enregistrement à l'aide de déclencheurs MySQL

La façon dont vous essayez de définir la valeur d'une colonne est une mise à jour. Parce que vous le faites après insertion l'opération est terminée.

Vous avez en fait besoin d'un before gâchette.

Et pour attribuer la même nouvelle valeur auto-incrémentée de la colonne de clé primaire de la même table, vous feriez mieux de l'obtenir à partir de information_schema.tables .

Exemple :

delimiter //
drop trigger if exists bi_table_name //

create trigger bi_table_name before insert on table_name
for each row begin
  set @auto_id := ( SELECT AUTO_INCREMENT 
                    FROM INFORMATION_SCHEMA.TABLES
                    WHERE TABLE_NAME='table_name'
                      AND TABLE_SCHEMA=DATABASE() ); 
  set new.priority= @auto_id;
end;
//

delimiter ;

Remarque  :Assurez-vous que vous n'avez pas de déclencheur prédéfini avec le même nom et/ou la même action. Si vous en avez, supprimez-les avant de créer le nouveau.

Observations  :
Selon documentation mysql sur last_insert_id() ,

donc, selon last_insert_id() et auto_increment les valeurs de champ dans les insertions par lots ne semblent pas fiables.