sql >> Databasteknik >  >> RDS >> Mysql

Kan du komma åt värdet för automatisk inkrement i MySQL inom ett uttalande?

det finns inget behov av att skapa en annan tabell, och max() kommer att få problem enligt värdet auto_increment för tabellen, gör så här:

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

Jag förklarar variabeln next_id eftersom den vanligtvis kommer att användas på något annat sätt(*), men du kan göra rakt av 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

Även i fall av (SELECT string field) kan du använda CAST-värdet;

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

(*) För att automatiskt namnge en bild:

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

(*) För att skapa en hash:

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


  1. Återställer SQL Editor-filer (frågor, procedurer) efter padda för Oracle-krascher eller hänger

  2. Pivotera en tabell i SQL (d.v.s. korstabulering/korstabulering)

  3. Världens populäraste databashanteringssystem

  4. Skapa en tillfällig tabell i en SELECT-sats utan en separat CREATE TABLE