Mysql
 sql >> Teknologi Basis Data >  >> RDS >> Mysql

Bisakah Anda mengakses nilai kenaikan otomatis di MySQL dalam satu pernyataan?

tidak perlu membuat tabel lain, dan max() akan mengalami masalah sesuai dengan nilai auto_increment tabel, lakukan ini:

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

Saya mendeklarasikan variabel next_id karena biasanya akan digunakan dalam beberapa cara lain (*), tetapi Anda bisa melakukannya langsung 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

Juga dalam kasus (bidang string SELECT) Anda dapat menggunakan nilai 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

(*) Untuk menamai gambar secara otomatis:

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

(*) Untuk membuat hash:

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. meneruskan LIMIT sebagai parameter ke MySQL sproc

  2. MySQL:VARCHAR besar vs. TEXT?

  3. UNIX_TIMESTAMP() Contoh – MySQL

  4. mysqli::query():Tidak dapat mengambil mysqli

  5. Contoh LOCALTIMESTAMP – MySQL