sql >> Databáze >  >> RDS >> Mysql

Máte přístup k hodnotě automatického přírůstku v MySQL v rámci jednoho příkazu?

není potřeba vytvářet další tabulku a max() bude mít problémy podle hodnoty auto_increment tabulky, proveďte toto:

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

Deklaruji proměnnou next_id, protože obvykle bude použita jiným způsobem (*), ale můžete to udělat rovnou new.field=(select ...)

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

Také v případech (pole SELECT string) můžete použít hodnotu CAST;

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

(*) Automatické pojmenování obrázku:

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

(*) Chcete-li vytvořit hash:

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


  1. Android – kurzor na MapReady (značky)

  2. Jak proměnit 2 dotazy se společnými sloupci (A, B) a (A, C) na jediný (A, B, C)?

  3. Postgresql dotaz mezi obdobími

  4. Jak nainstalovat MariaDB 10 na RHEL 8