sql >> Database >  >> RDS >> Mysql

Kunt u binnen één instructie toegang krijgen tot de waarde voor automatisch verhogen in MySQL?

het is niet nodig om een ​​andere tabel aan te maken, en max() zal problemen hebben volgens de auto_increment waarde van de tabel, doe dit:

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

Ik declareer de next_id variabele omdat deze meestal op een andere manier zal worden gebruikt(*), maar je zou dit rechtstreeks kunnen doen 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

Ook in het geval van (SELECT string field) kun je de CAST-waarde gebruiken;

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

(*) Om een ​​afbeelding automatisch een naam te geven:

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

(*) Om een ​​hash aan te maken:

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


  1. Variabelen op dezelfde regel declareren en initialiseren in VBA

  2. java.math.BigInteger kan niet worden gecast naar java.lang.Integer

  3. Prioriteiten implementeren in SQL (postgres)

  4. Dynamische SQL om kolomnamen te genereren?