sql >> Base de Datos >  >> RDS >> Mysql

¿Puede acceder al valor de incremento automático en MySQL dentro de una declaración?

no hay necesidad de crear otra tabla, y max() tendrá problemas de acuerdo con el valor de auto_incremento de la tabla, haga esto:

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

Declaro la variable next_id porque generalmente se usará de alguna otra manera (*), pero podrías hacer directamente 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

También en los casos de (campo de cadena SELECCIONAR) puede usar el valor 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

(*) Para auto-nombrar una imagen:

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

(*) Para crear un hash:

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