Dalam pangkalan data hubungan, selalunya perlu mengubah suai data dalam berbilang jadual pada masa yang sama. Walaupun ada kemungkinan untuk menggunakan pernyataan INSERT yang berasingan, pendekatan ini tidak cekap dan terdedah kepada ralat.
Soalan:
Andaikan pangkalan data mengandungi tiga jadual: Object_Table, Data_Table dan Link_Table. Matlamatnya adalah untuk menyalin data yang dikaitkan dengan pengecam objek tertentu daripada Jadual_Data dan memasukkan rekod yang sepadan ke dalam Jadual_Data dan Jadual_Pautan, tetapi dengan pengecam objek yang berbeza. Walaupun ini boleh dicapai menggunakan gelung dan dua pernyataan INSERT setiap lelaran, penyelesaian yang lebih baik adalah untuk meminimumkan jumlah kod dan kemungkinan ralat.
Penyelesaian terbaik:
Untuk memasukkan data ke dalam berbilang jadual dalam satu transaksi, anda boleh menggunakan sisipan berbilang jadual. Kaedah ini memastikan atomiti dan kecekapan. Coretan kod berikut menunjukkan pendekatan ini:
<code class="language-sql">BEGIN TRANSACTION; DECLARE @DataID int; INSERT INTO DataTable (Column1 ...) VALUES (....); SELECT @DataID = scope_identity(); INSERT INTO LinkTable (ObjectID, DataID) VALUES (@ObjectID, @DataID); COMMIT;</code>
Perihalan kod:
BEGIN TRANSACTION
menandakan permulaan transaksi. INSERT
pertama memasukkan rekod ke dalam Jadual_Data dan mengembalikan pengecam (@DataID) baris yang baru dimasukkan. INSERT
kedua menggunakan pengecam yang diambil untuk mengaitkan baris baharu dalam Jadual_Data dengan objek yang dinyatakan dalam Jadual_Pautan. COMMIT
melengkapkan transaksi, memastikan kedua-dua operasi sisipan berjaya atau kedua-duanya gagal. Penyelesaian ini tidak memerlukan gelung dan jadual sementara, menjadikan kod lebih ringkas dan cekap. Selain itu, ia memberikan keatomisan dengan menjamin bahawa dua operasi sisipan bertindak sebagai satu unit kerja.
Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Memasukkan Data dengan Cekap ke dalam Jadual Berbilang Pangkalan Data Secara serentak?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!