Mysql
 sql >> Database >  >> RDS >> Mysql

aggiorna la colonna della tabella dopo aver inserito un nuovo record utilizzando i trigger MySQL

Il modo in cui stai tentando di impostare il valore su una colonna è un aggiornamento. Perché lo stai facendo dopo l'inserimento operazione completata.

In realtà hai bisogno di un before grilletto.

E per assegnare lo stesso nuovo valore con incremento automatico della colonna della chiave primaria della stessa tabella, è meglio ottenerlo da information_schema.tables .

Esempio :

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 ;

Nota :Assicurati di non avere alcun attivatore predefinito con lo stesso nome e/o azione. Se ne hai alcuni, rilasciali prima di creare il nuovo.

Osservazioni :
Come da documentazione mysql su last_insert_id() ,

quindi, a seconda di last_insert_id() e auto_increment i valori dei campi negli inserimenti batch non sembrano affidabili.