Eğer istemci tarafında işlenmesi gereken bir kilitlenme döner hatası 1213
, hangi
Bir kilitlenme ve kilit bekleme farklı şeyler olduğunu unutmayın. Bir çıkmaz, hayır "başarısız" işlem vardır: ikisi de suçlu. Bir geri alınır garanti yoktur.
Bir çıkmaz böyle bir senaryoda oluşur:
UPDATE t_first -- transacion 1 locks t_first
SET id = 1;
UPDATE t_second -- transaction 2 locks t_second
SET id = 2;
UPDATE t_second -- transaction 1 waits for transaction 2 to release the lock on t_second
SET id = 2;
UPDATE t_first -- transaction 2 waits for transaction 1 to release the lock on t_first. DEADLOCK
SET id = 2;
Eğer bir kilit bekleyin sanılmasın olmadığına emin misin?
Bir başka bir işlem tarafından kilitli bir kaynak kilitlemek için çalıştığında bir kilit bekleme oluşur.
Bir kilit bekleyin yukarıdaki örnekte adımda gerçekleşir In 3
.
Bu kilit tutan işlem yapılıyor veya geri yuvarlayarak dışarıdan çözülebilir (kilitlenme aksine) normal bir durum olduğu için, InnoDB
kilit tutan işlem geri denemez.
Bunun yerine, sadece zaman aşımı oluştuktan sonra kilidinin çalıştı deyimi iptal edecektir.
Varsayılan zaman aşımı 50
saniye ve innodb_lock_wait_timeout
a> kullanılarak ayarlanır.
Başarısız deyimi (acquire kilit çalıştı ki o) hatası döndürür 1205
.