Permintaan SELECT dalam transaksi, dengan sendirinya, tidak terlindung dengan baik dari UPDATE dan DELETE.
Apa yang perlu Anda gunakan berikut ini:
Jika Anda menerbitkan Delete From orders Where id=1
, itu akan terjadi setelah baris di orders
tabel telah merilis kunci mereka di akhir transaksi. Anda dapat bereksperimen (pada Server Dev / Staging) dengan menggunakan READ UNCOMMITTED
tingkat isolasi transaksi untuk membuat penghapusan terjadi secara logis, tetapi hanya pada komit yang akan terlihat dan dicatat secara permanen.
Dalam transaksi kedua, pada dasarnya semua taruhan dibatalkan. Jika Anda berlari
select * From orders Where id=1;
UPDATE orders SET username="John" Where id=1;
menjalankan Delete From orders Where id=1
akan melakukan segera. Bergantung pada urutan MySQL menjalankan pernyataan ini, apakah Anda akan melihat (atau tidak melihat) baris hapus.
CAVEAT
MySQL 5.6 sekarang memiliki yang berikut :
START TRANSACTION READ WRITE;
START TRANSACTION READ ONLY;
READ WRITE dan READ ONLY modifier mengatur mode akses transaksi. Mereka mengizinkan atau melarang perubahan pada tabel yang digunakan dalam transaksi. Pembatasan READ ONLY mencegah transaksi dari memodifikasi atau mengunci tabel transaksional dan nontransaksional yang dapat dilihat oleh transaksi lain; transaksi masih dapat memodifikasi atau mengunci tabel sementara. Pengubah ini tersedia pada MySQL 5.6.5.