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

Kan du få adgang til den automatiske stigningsværdi i MySQL inden for en erklæring?

der er ingen grund til at oprette en anden tabel, og max() vil have problemer i henhold til tabellens auto_increment-værdi, gør dette:

CREATE TRIGGER trigger_name BEFORE INSERT ON tbl FOR EACH ROW
BEGIN
   DECLARE next_id;
   SET next_id = (SELECT AUTO_INCREMENT FROM information_schema.TABLES WHERE TABLE_SCHEMA=DATABASE() AND TABLE_NAME='tbl');
   SET NEW.field = next_id;
END

Jeg erklærer variablen next_id, fordi den normalt vil blive brugt på en anden måde(*), men du kunne gøre det lige new.field=(vælg ...)

CREATE TRIGGER trigger_name BEFORE INSERT ON tbl FOR EACH ROW
BEGIN
   SET NEW.field=(SELECT AUTO_INCREMENT FROM information_schema.TABLES WHERE TABLE_SCHEMA=DATABASE() AND TABLE_NAME='tbl');
END

Også i tilfælde af (SELECT string field) kan du bruge CAST-værdi;

CREATE TRIGGER trigger_name BEFORE INSERT ON tbl FOR EACH ROW
BEGIN
   SET NEW.field=CAST((SELECT aStringField FROM information_schema.TABLES WHERE TABLE_SCHEMA=DATABASE() AND TABLE_NAME='tbl') AS UNSIGNED);
END

(*) For automatisk at navngive et billede:

SET NEW.field = CONCAT('image_', next_id, '.gif');

(*) For at oprette en hash:

SET NEW.field = CONCAT( MD5( next_id ) , MD5( FLOOR( RAND( ) *10000000 ) ) );


  1. Giv valg på alle borde, der ejes af en bestemt bruger

  2. Oprettelse af en trigger i Oracle Express

  3. LOAD DATA INFILE tilsvarende i Oracle

  4. Båndbreddevenlig forespørgselsprofilering til Azure SQL Database