Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Czy możesz uzyskać dostęp do wartości automatycznego przyrostu w MySQL w ramach jednej instrukcji?

nie ma potrzeby tworzenia kolejnej tabeli, a max() będzie miał problemy związane z wartością auto_increment tabeli, zrób tak:

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

Deklaruję zmienną next_id, ponieważ zwykle będzie ona używana w inny sposób(*), ale możesz to zrobić po prostu new.field=(wybierz...)

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

Również w przypadku (pole ciągu SELECT) można użyć wartości 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

(*) Aby automatycznie nazwać obraz:

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

(*) Aby utworzyć skrót:

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


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Jak zmienić katalog danych MySQL?

  2. Jak usunąć wiodące i końcowe spacje w MySQL?

  3. 10 przydatnych wskazówek dotyczących dostrajania wydajności MySQL

  4. Polecenia tworzenia kopii zapasowych i przywracania danych MySQL do administrowania bazą danych

  5. Jak dodać wiodące zera do liczby w MySQL?