saya ingin melacak riwayat perubahan untuk pengguna, sehingga setiap kali dia mengubah profilnya, saya perlu mengambil data lama dan menyimpannya di riwayat dan memperbarui dengan data baru.
Saya bisa menggunakan a select
untuk mendapatkan data lama, insert
sejarah, dan akhirnya update
mengubah data.
dapatkah saya memiliki semua ini dalam satu permintaan di mysql tanpa menggunakan prosedur tersimpan, pemicu, dll. seperti menggunakan kunci dll. jika demikian beri saya contoh kecil.
Jawaban:
Untuk melakukan hal ini tanpa risiko memblokir pengguna lain mencoba untuk memperbarui profil yang sama pada saat yang sama, Anda perlu untuk mengunci baris di
t1
pertama, kemudian gunakan transaksi (sebagai Rolando menunjukkan di komentar untuk pertanyaan Anda):sumber
Saya tidak percaya ada cara untuk menggabungkan ketiga pernyataan itu. Hal terdekat dengan itu tidak benar-benar membantu Anda, dan itu adalah SET SELECT. Taruhan terbaik Anda adalah pemicu. Di bawah ini adalah contoh pemicu yang sering saya gunakan untuk mempertahankan jejak audit (dibangun dengan PHP):
sumber
Saya telah menemukan bahwa kueri ini berfungsi di SQL & MySQL Server
INSERT INTO t2 SELECT * FROM t1 WHERE id=10; UPDATE t1 SET id=11 WHERE id=10;
Semoga ini bermanfaat bagi orang lain juga di masa depan.
sumber