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.