Dalam MySQL, tidak mungkin untuk melaksanakan satu pertanyaan untuk memasukkan data ke dalam berbilang jadual secara serentak. Untuk mencapai matlamat ini, satu pendekatan biasa ialah menggunakan berbilang pertanyaan. Walau bagaimanapun, ini menimbulkan persoalan tentang cara untuk menetapkan ID pengguna yang dinaikkan secara automatik daripada jadual pengguna kepada lajur id pengguna dalam jadual profil.
Kepada memindahkan ID yang dinaikkan automatik dengan lancar, kami boleh memanfaatkan urus niaga dan fungsi LAST_INSERT_ID(). Berikut ialah coretan kod yang disemak:
BEGIN; INSERT INTO users (username, password) VALUES('test', 'test'); INSERT INTO profiles (userid, bio, homepage) VALUES(LAST_INSERT_ID(), 'Hello world!', 'http://www.stackoverflow.com'); COMMIT;
Dalam transaksi ini, pertanyaan pertama memasukkan rekod ke dalam jadual pengguna. Fungsi LAST_INSERT_ID() dalam pertanyaan kedua mendapatkan semula ID auto-increment daripada sisipan pertama dan memberikannya kepada medan userid dalam jadual profil. Penyata COMMIT memuktamadkan urus niaga, memastikan kedua-dua sisipan sama ada selesai atau digugurkan.
LAST_INSERT_ID() Tetapkan Semula: Apabila pertanyaan kedua memasukkan rekod ke dalam jadual dengan lajur autokenaikan, LAST_INSERT_ID() dikemas kini kepada ID baharu. Untuk mengelakkan ini, anda boleh menyimpan ID awal dalam MySQL atau pembolehubah khusus bahasa:
Pilihan 1: Pembolehubah MySQL
INSERT ... SELECT LAST_INSERT_ID() INTO @mysql_variable_here; INSERT INTO table2 (@mysql_variable_here, ...);
Pilihan 2 : Pembolehubah Bahasa
INSERT ... $last_id = mysql_insert_id(); INSERT INTO table2 ($last_id, ...);
Transaksi dan Gangguan: Jika pelaksanaan pertanyaan terganggu antara pertanyaan, anda mungkin menghadapi ketidakkonsistenan data. Untuk memastikan integriti data, anda boleh melaksanakan blok transaksi di sekitar pertanyaan, yang menjamin sama ada semua pertanyaan dilaksanakan atau tidak.
Atas ialah kandungan terperinci Bagaimana untuk Memasukkan Data ke dalam Berbilang Jadual MySQL Semasa Mengendalikan ID Auto-Incremented?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!