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

opdater tabelkolonne efter indsættelse af ny post ved hjælp af MySQL-udløsere

Den måde, du forsøger at indstille værdi til en kolonne på, er en opdatering. Fordi du gør det efter indsættelse handlingen er fuldført.

Du har faktisk brug for en before udløser.

Og for at tildele den samme nye automatiske øgede værdi af primærnøglekolonnen i samme tabel, må du hellere hente den fra information_schema.tables .

Eksempel :

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 ;

Bemærk :Sørg for, at du ikke har nogen foruddefineret trigger med samme navn og/eller handling. Hvis du har nogle, så slip dem, før du opretter den nye.

Observationer :
I henhold til mysql-dokumentation på last_insert_id() ,

derfor afhængigt af last_insert_id() og auto_increment feltværdier i batch-indsæt virker ikke pålidelige.



  1. Aktiver binær tilstand, mens du gendanner en database fra en SQL-dump

  2. Hvordan ændres MySQL-tidszone i en databaseforbindelse ved hjælp af Java?

  3. COALESCE i laravel

  4. I stedet for trigger i SQL Server mister SCOPE_IDENTITY?