Bir işleme Select deyimi koyma


10

Bu 2 sorgu arasındaki fark nedir:

START TRANSACTION;
SELECT * FROM orders WHERE id=1;
UPDATE orders SET username='John' WHERE id=1;
COMMIT;

Ve işlem yapmadan:

SELECT * FROM orders WHERE id=1;
UPDATE orders SET username='John' WHERE id=1;  

SELECTİçeride bir işleme sahip olmanın etkisi nedir ?

Her iki durumda da DELETE FROM orders WHERE id=1hemen sonra başka bir oturumdan çağrıldıysa SELECT, ne zaman işlenecek?

Yanıtlar:


5

Bir işlemin içindeki bir SELECT sorgusu, kendi içinde, UPDATE'lerden ve DELETE'lerden düzgün şekilde korunmaz.

Aşağıdakileri kullanmanız için gerekenler:

Sorun yaşarsanız , işlemin sonunda tablodaki Delete From orders Where id=1satırlar orderskilitlerini serbest bıraktığında gerçekleşir. READ UNCOMMITTEDSilme işleminin mantıksal olarak gerçekleşmesi için işlem yalıtım düzeyini kullanarak (bir Geliştirici / Hazırlama Sunucusunda lütfen) deneme yapabilirsiniz, ancak yalnızca taahhütte görünür ve kalıcı olarak kaydedilir.

İkinci işlemde, temel olarak tüm bahisler kapalıdır. Eğer koşarsan

select * From orders Where id=1;
UPDATE orders SET username="John" Where id=1;

koşmak Delete From orders Where id=1derhal taahhüt eder. MySQL bu ifadeleri yürütme sırasına bağlı olarak, silme satırlarını görecek (veya görmeyecek).

UYARI

MySQL 5.6 şimdi aşağıdakilere sahiptir :

  • START TRANSACTION READ WRITE;
  • START TRANSACTION READ ONLY;

YAZI OKU ve SADECE OKU değiştiricileri işlem erişim modunu ayarlar. İşlemde kullanılan tablolarda değişiklik yapılmasına izin verir veya yasaklar. YALNIZCA OKUMA kısıtlaması, işlemin diğer işlemler tarafından görülebilen hem işlemsel hem de işlemsel olmayan tabloları değiştirmesini veya kilitlemesini engeller; işlem yine de geçici tabloları değiştirebilir veya kilitleyebilir. Bu değiştiriciler MySQL 5.6.5 itibariyle mevcuttur.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.