Rumah > pangkalan data > tutorial mysql > Bagaimanakah Saya Boleh Dapatkan Nilai Lajur Pra-Kemas Kini dalam SQL Tanpa Menggunakan Pencetus atau Prosedur Tersimpan?

Bagaimanakah Saya Boleh Dapatkan Nilai Lajur Pra-Kemas Kini dalam SQL Tanpa Menggunakan Pencetus atau Prosedur Tersimpan?

Linda Hamilton
Lepaskan: 2025-01-03 18:51:39
asal
647 orang telah melayarinya

How Can I Retrieve Pre-Update Column Values in SQL Without Using Triggers or Stored Procedures?

Mendapatkan semula Nilai Pra-Kemas Kini menggunakan SQL SAHAJA

Dalam senario di mana pencetus, prosedur tersimpan atau entiti luaran tidak tersedia, ia menjadi perlu untuk mendapatkan semula nilai lama lajur daripada baris yang telah dikemas kini menggunakan SQL sahaja.

Cabaran

Mendapatkan semula nilai prakemas kini terus daripada klausa RETURNING tidak mungkin kerana ia hanya mengembalikan nilai pasca kemas kini.

Penyelesaian menggunakan Self-Join

Penyelesaian adalah dengan menyertai jadual untuk satu lagi contoh sendiri menggunakan syarat yang mengenal pasti baris yang sedang dikemas kini secara unik. Ini membenarkan akses kepada kedua-dua nilai lama dan baharu dalam klausa RETURNING.

UPDATE my_table
SET processing_by = our_id_info
FROM my_table AS old_my_table
WHERE old_my_table.trans_nbr = my_table.trans_nbr
AND my_table.row_id = old_my_table.row_id
RETURNING my_table.row_id, my_table.processing_by, old_my_table.processing_by AS old_processing_by
Salin selepas log masuk

Mengendalikan Concurrency

Untuk mengelakkan keadaan perlumbaan yang berpotensi, adalah penting untuk mengelakkan penulisan serentak ke baris yang sama semasa kemas kini. Ini boleh dicapai menggunakan kunci eksplisit pada baris yang akan dikemas kini:

UPDATE my_table
SET processing_by = our_id_info
FROM (SELECT * FROM my_table WHERE trans_nbr = 4 FOR UPDATE) AS old_my_table
WHERE old_my_table.trans_nbr = my_table.trans_nbr
RETURNING my_table.row_id, my_table.processing_by, old_my_table.processing_by AS old_processing_by
Salin selepas log masuk

Ini memastikan bahawa hanya baris yang dikunci oleh subkueri diproses, menghalang kemas kini yang bercanggah.

Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Dapatkan Nilai Lajur Pra-Kemas Kini dalam SQL Tanpa Menggunakan Pencetus atau Prosedur Tersimpan?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan