Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Você pode acessar o valor de incremento automático no MySQL em uma instrução?


não há necessidade de criar outra tabela, e max() terá problemas de acordo com o valor auto_increment da tabela, faça assim:
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

Eu declaro a variável next_id porque normalmente ela será usada de alguma outra forma(*), mas você pode fazer direto 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

Também em casos de (campo de string SELECT) você pode usar o 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 nomear automaticamente uma imagem:
SET NEW.field = CONCAT('image_', next_id, '.gif');

(*) Para criar um hash:
SET NEW.field = CONCAT( MD5( next_id ) , MD5( FLOOR( RAND( ) *10000000 ) ) );