Rumah >pangkalan data >tutorial mysql >Bagaimana untuk Mendapatkan ID Auto-Tambahan Secara Cekap Selepas Sisipan Pukal dalam MySQL?

Bagaimana untuk Mendapatkan ID Auto-Tambahan Secara Cekap Selepas Sisipan Pukal dalam MySQL?

DDD
DDDasal
2024-12-01 19:22:10455semak imbas

How to Efficiently Retrieve Auto-Increment IDs After Bulk Inserts in MySQL?

Mendapatkan Auto-Tambahan ID daripada Sisipan Pukal dalam MySQL

Salah satu tugas biasa dalam pengurusan pangkalan data ialah memasukkan berbilang baris ke dalam jadual dan mendapatkan semula ID autokenaikan yang dijana untuk setiap baris. Semasa mendapatkan ID yang terakhir dimasukkan adalah mudah menggunakan fungsi LAST_INSERT_ID(), sisipan pukal menimbulkan cabaran dalam mendapatkan tatasusunan semua ID yang dijana.

Kaedah Tradisional: Memasukkan Melalui Jadual Sementara

Sebelum ini, teknik biasa melibatkan memasukkan ID baharu ke dalam jadual sementara dan menggunakan subquery untuk mendapatkannya. Walau bagaimanapun, pendekatan ini memerlukan langkah tambahan dan memperkenalkan overhed prestasi.

Menggunakan LAST_INSERT_ID() dan ROW_COUNT() dengan InnoDB

Versi terbaru MySQL, terutamanya yang menggunakan InnoDB enjin storan, sediakan kaedah alternatif untuk mendapatkan ID sisipan pukal. Kaedah ini memanfaatkan fungsi LAST_INSERT_ID() bersama-sama dengan ROW_COUNT() untuk mengekstrak julat nilai kenaikan automatik yang diberikan.

Prosedur:

  1. Konfigurasikan innodb_autoinc_lock_lock_autoinc pembolehubah sistem kepada 0 (tradisional) atau 1 (berturut-turut). Ini memastikan bahawa nilai kenaikan automatik ditetapkan secara berurutan untuk sisipan pukal.
  2. Laksanakan pernyataan sisipan pukal.
  3. Dapatkan ID pertama daripada LAST_INSERT_ID().
  4. Kira yang terakhir ID dengan menambahkan ROW_COUNT() - 1 pada yang pertama ID.

Contoh:

INSERT INTO `my_table` (`name`, `email`) VALUES
('John Doe', 'john.doe@example.com'),
('Jane Doe', 'jane.doe@example.com'),
('Peter Jones', 'peter.jones@example.com');

SET @first_id = LAST_INSERT_ID();
SET @last_id = @first_id + ROW_COUNT() - 1;

SELECT * FROM `my_table` WHERE `id` BETWEEN @first_id AND @last_id;

Faedah:

  • Tiada sementara jadual: Menghilangkan keperluan untuk sisipan dan subkueri tambahan operasi.
  • Prestasi yang dipertingkatkan: Menyediakan cara yang lebih cekap untuk mendapatkan ID sisipan pukal.
  • Keserasian dengan InnoDB: Memanfaatkan ciri InnoDB enjin storan untuk memastikan penetapan ID berurutan semasa sisipan pukal.

Atas ialah kandungan terperinci Bagaimana untuk Mendapatkan ID Auto-Tambahan Secara Cekap Selepas Sisipan Pukal dalam MySQL?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn