Ben tam işlemlerin fikri kavramak çalışıyorum. Bu nedenle aşağıdaki soru ... (acemi tabii, bu yüzden gülmek yok: D)
Ben (microsoft PHP SQL sürücüsü kullanarak) PHP a (basitleştirilmiş) işlem kurdunuz. Ben daha sonra bazı ekstra işleme silmek için gidiyorum satırları almak istiyorum:
sqlsrv_begin_transaction($conn);
$sql = "SELECT * FROM test WITH (XLOCK) WHERE a<10";
$statement = sqlsrv_query($conn,$sql);
$sql = "DELETE FROM test WHERE a<10";
sqlsrv_query($conn,$sql);
$result = get_result_array($statement);
sqlsrv_commit($conn);
$result2 = get_result_array($statement);
1) Ben $ sonuç ama $ result2 boş bir dizideki beklenen sonuç alabilirim. Neden?
Sonra işlem aslında idam edilmiştir çünkü $ result2 sadece bir sonuç beklenebilir. Ben $ sonucu sonuç, hafızaya 'geçici' sonucu bir tür değil aslında gerçek veritabanından bir sonucu olduğunu tahmin.
2) Bu an arasında işlem başlamış olması olabilir ve fiili işlemek, başka bir bağlantı başka bir sorgu maç (a <10) satır değişti? Bu sonuca göre $ I bekliyorum sonuçları veritabanında gerçek değişikliklerden farklı olacağı anlamına gelir.
Ya da (a) işlem (-arasındaki diğer bağlantılardan sorgular etkilenmez) veritabanının bir bellek kopya ile oluşmaz, veya (b) işlem başından beri elde kilitler için eylem zaten olmasıdır Diğer bağlantılarda diğer sorgular?
Bunu yazdıktan sonra ben cevap b bekliyorum ....?