Rumah >pangkalan data >tutorial mysql >Bagaimana untuk Melaksanakan Operasi INSERT atau UPDATE dengan Cekap dalam Pelayan SQL Semasa Mencegah Kebuntuan?
Mengoptimumkan Operasi INSERT dan UPDATE dalam SQL Server untuk Mengelakkan Kebuntuan
Mengurus operasi serentak INSERT
dan UPDATE
pada jadual seperti MyTable
(KEY, datafield1, datafield2...) selalunya memerlukan pendekatan "pertanyaan langsung" – mengemas kini baris sedia ada atau memasukkan baris baharu jika tidak. wujud. Prestasi dan integriti data adalah kebimbangan utama.
Kaedah "jika wujud" yang naif adalah tidak cekap dan terdedah kepada pelanggaran kunci utama dalam persekitaran berbilang benang. Untuk menjamin ketekalan data dan mengelakkan kebuntuan, strategi berasaskan transaksi adalah lebih baik:
Kaedah 1:
<code class="language-sql">BEGIN TRANSACTION IF EXISTS (SELECT * FROM table WITH (UPDLOCK,SERIALIZABLE) WHERE key = @key) BEGIN UPDATE table SET ... WHERE key = @key END ELSE BEGIN INSERT INTO table (key, ...) VALUES (@key, ...) END COMMIT TRANSACTION</code>
Kaedah 2:
<code class="language-sql">BEGIN TRANSACTION UPDATE table WITH (SERIALIZABLE) SET ... WHERE key = @key IF @@ROWCOUNT = 0 BEGIN INSERT INTO table (key, ...) VALUES (@key,...) END COMMIT TRANSACTION</code>
Kedua-dua kaedah menggunakan SERIALIZABLE
tahap pengasingan untuk menghapuskan kebuntuan dan mengekalkan integriti data. Ini memastikan prestasi optimum, terutamanya apabila beberapa utas secara serentak mencuba operasi INSERT
atau UPDATE
. Pilihan antara dua kaedah mungkin bergantung pada ciri prestasi khusus dan pilihan gaya pengekodan.
Atas ialah kandungan terperinci Bagaimana untuk Melaksanakan Operasi INSERT atau UPDATE dengan Cekap dalam Pelayan SQL Semasa Mencegah Kebuntuan?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!