Kami memiliki sesuatu yang serupa di salah satu situs kami, kami telah menambahkan banyak tabel:
users
sites
... dll
Kemudian kami memiliki banyak tabel bayangan:
users-shadow
sites-shadow
... dll
Tabel bayangan memiliki struktur yang identik dengan tabel sebenarnya kecuali untuk baris tambahan untuk pengguna yang membuat perubahan. Jadi pertama-tama kita menggunakan kueri ini saat perubahan diajukan oleh pengguna yang perlu tindakan databasenya disetujui:
REPLACE INTO users-shadow (user_mod,id,username,password,salt...) VALUES (16,50,'bob','stuff','salt'...);
Jelas, pastikan ini tidak terbuka untuk injeksi, gunakan pernyataan yang disiapkan dll.
Saat disetujui, baris di shadow
tabel hanya dihapus dari shadow
tabel, user_mod
nilai turun dan perubahan (nilai non-null) dimasukkan ke dalam tabel nyata (atau diperbarui jika id
ditentukan, menggunakan GANTI
sintaksis). Kami melakukan logika ini di Perl jadi sayangnya tidak ada SQL yang tersedia untuk itu.
Ingat bahwa SQL REPLACE
melakukan DELETE
dan INSERT
daripada UPDATE
. Anda perlu mengubah pemicu apa pun untuk memungkinkan perilaku ini.
Catatan:Alasan kami tidak menggunakan tanda 'menyetujui' adalah karena kami memerlukan kemampuan untuk mengubah catatan yang ada, tentu saja kami tidak dapat memiliki beberapa catatan dengan kunci utama yang sama.