Mysql
 sql >> Base de données >  >> RDS >> Mysql

Pouvez-vous accéder à la valeur d'incrémentation automatique dans MySQL dans une seule instruction ?

il n'est pas nécessaire de créer une autre table, et max() aura des problèmes selon la valeur auto_increment de la table, faites ceci :

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

Je déclare la variable next_id car elle sera généralement utilisée d'une autre manière (*), mais vous pouvez le faire directement 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

Également dans les cas de (champ de chaîne SELECT), vous pouvez utiliser la valeur 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

(*) Pour nommer automatiquement une image :

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

(*) Pour créer un hachage :

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