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

Puoi accedere al valore di incremento automatico in MySQL all'interno di un'istruzione?

non è necessario creare un'altra tabella e max() avrà problemi in base al valore auto_increment della tabella, procedere come segue:

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

Dichiaro la variabile next_id perché di solito verrà usata in qualche altro modo(*), ma potresti farlo direttamente 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

Anche nei casi di (SELECT campo stringa) è possibile utilizzare il valore 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

(*) Per denominare automaticamente un'immagine:

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

(*) Per creare un hash:

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