Rumah >pangkalan data >tutorial mysql >Bagaimanakah Saya Boleh Memasukkan Data ke dalam Berbilang Jadual MySQL Secara serentak dan Mengekalkan Integriti Data?

Bagaimanakah Saya Boleh Memasukkan Data ke dalam Berbilang Jadual MySQL Secara serentak dan Mengekalkan Integriti Data?

Mary-Kate Olsen
Mary-Kate Olsenasal
2024-12-24 21:15:40299semak imbas

How Can I Insert Data into Multiple MySQL Tables Simultaneously and Maintain Data Integrity?

Memasukkan ke dalam Berbilang Jadual dalam MySQL: Adakah Mungkin atau Isu Normalisasi Pangkalan Data?

Anda telah menghadapi dilema: memasukkan data ke dalam berbilang jadual secara serentak menggunakan satu pertanyaan MySQL. Walau bagaimanapun, anda telah mendapati ini tidak mungkin. Untuk mengatasi cabaran ini, anda telah mempertimbangkan untuk menggunakan berbilang pertanyaan:

INSERT INTO users (username, password) VALUES('test', 'test')
INSERT INTO profiles (userid, bio, homepage) VALUES('[id of the user here?]','Hello world!', 'http://www.stackoverflow.com')

Tetapi kini anda menghadapi masalah baharu: bagaimana untuk menetapkan ID kenaikan automatik daripada jadual pengguna kepada id pengguna "manual" untuk jadual profil?

Jawapannya: Menggunakan Transaksi

Walaupun anda tidak boleh masukkan ke dalam beberapa jadual dalam satu arahan MySQL, anda boleh memanfaatkan transaksi. Begini caranya:

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;

Memahami LAST_INSERT_ID()

Fungsi LAST_INSERT_ID() membolehkan anda menggunakan semula nilai autoincrement. Dalam penyataan kedua, LAST_INSERT_ID() akan mendapatkan semula nilai lajur autoincrement yang dimasukkan dalam penyataan pertama secara automatik.

Kaedah Alternatif

1. Menggunakan Pembolehubah MySQL:

INSERT ...
SELECT LAST_INSERT_ID() INTO @mysql_variable_here;
INSERT INTO table2 (@mysql_variable_here, ...);
INSERT INTO table3 (@mysql_variable_here, ...);

2. Menggunakan PHP atau Pembolehubah Bahasa Lain:

  • Masukkan rekod awal
  • Gunakan bahasa anda untuk mendapatkan LAST_INSERT_ID()
  • Sisipkan ke dalam jadual berikutnya menggunakan pembolehubah PHP/bahasa

Nota tentang Ketekalan Transaksi

Adalah penting untuk membungkus pertanyaan anda dalam transaksi untuk memastikan ketekalan data, bermakna sama ada semua pertanyaan berjaya atau tidak. Jika pelaksanaan terganggu antara pertanyaan, sesetengah jadual mungkin telah memasukkan rekod manakala yang lain tidak. Transaksi menjamin bahawa ini tidak berlaku.

Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Memasukkan Data ke dalam Berbilang Jadual MySQL Secara serentak dan Mengekalkan Integriti Data?. 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