Tidak, Anda tidak dapat menyisipkan beberapa tabel dalam satu perintah MySQL. Namun Anda dapat menggunakan transaksi.
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;
Lihat LAST_INSERT_ID()
untuk menggunakan kembali nilai peningkatan otomatis.
Anda berkata "Setelah sekian lama mencoba mencari tahu, tetap tidak berhasil. Tidak bisakah saya memasukkan ID yang baru saja dibuat ke dalam $var dan memasukkan $var itu ke semua perintah MySQL? "
Mari saya jelaskan:ada 3 kemungkinan cara di sini:
-
Dalam kode yang Anda lihat di atas. Ini melakukan semuanya di MySQL, dan
LAST_INSERT_ID()
pada pernyataan kedua secara otomatis akan menjadi nilai kolom kenaikan otomatis yang disisipkan pada pernyataan pertama.Sayangnya, ketika pernyataan kedua itu sendiri menyisipkan baris dalam tabel dengan kolom kenaikan otomatis,
LAST_INSERT_ID()
akan diperbarui ke tabel 2, dan bukan tabel 1. Jika Anda masih membutuhkan tabel 1 setelahnya, kita harus menyimpannya dalam variabel. Ini membawa kita ke cara 2 dan 3: -
Akan menyimpan
LAST_INSERT_ID()
dalam variabel MySQL:INSERT ... SELECT LAST_INSERT_ID() INTO @mysql_variable_here; INSERT INTO table2 (@mysql_variable_here, ...); INSERT INTO table3 (@mysql_variable_here, ...);
-
Akan menyimpan
LAST_INSERT_ID()
dalam variabel aphp (atau bahasa apa pun yang dapat terhubung ke database, sesuai pilihan Anda):INSERT ...
- Gunakan bahasa Anda untuk mengambil
LAST_INSERT_ID()
, baik dengan mengeksekusi pernyataan literal di MySQL, atau menggunakan misalnyamysql_insert_id()
php yang melakukan itu untuk Anda INSERT [use your php variable here]
PERINGATAN
Apa pun cara untuk menyelesaikan ini yang Anda pilih, Anda harus memutuskan apa yang harus terjadi jika eksekusi terputus di antara kueri (misalnya, server database Anda mogok). Jika Anda dapat hidup dengan "beberapa telah selesai, yang lain tidak", jangan lanjutkan membaca.
Namun, jika Anda memutuskan "semua kueri selesai, atau tidak ada yang selesai - Saya tidak ingin baris di beberapa tabel tetapi tidak ada baris yang cocok di tabel lain, saya selalu ingin tabel database saya konsisten", Anda perlu membungkus semua pernyataan dalam transaksi . Itu sebabnya saya menggunakan BEGIN
dan COMMIT
di sini.