Örnek sorular
Mysql Innodb TransactionsZorluk 1
MySQL'de InnoDB storage engine'inin varsayılan transaction isolation seviyesi nedir?
- aREAD UNCOMMITTED
- bREAD COMMITTED
- cREPEATABLE READ✓
- dSERIALIZABLE
Açıklama:InnoDB'nin varsayılan isolation seviyesi REPEATABLE READ'dir; PostgreSQL'in varsayılanı READ COMMITTED'dır. Tekrarlanan consistent non-locking read'ler ilk böyle okumada (ya da START TRANSACTION WITH CONSISTENT SNAPSHOT ile) oluşturulan snapshot'ı kullanır.
Mysql Innodb TransactionsZorluk 2
Bir geliştirici PostgreSQL'den MySQL'e geçiyor ve iki veritabanının da aynı varsayılan isolation davranışına sahip olduğunu varsayıyor. Farkında olması gereken somut fark nedir?
- aMySQL/InnoDB varsayılan olarak REPEATABLE READ kullanırken, PostgreSQL READ COMMITTED kullanır✓
- bMySQL/InnoDB varsayılan olarak READ UNCOMMITTED kullanırken, PostgreSQL REPEATABLE READ kullanır
- cİkisi de varsayılan olarak READ COMMITTED kullanır, ama MySQL bunu daha katı uygular
- dİkisi de varsayılan olarak SERIALIZABLE kullanır, ama MySQL bunu session bazında kapatmaya izin verir
Açıklama:InnoDB'nin varsayılan isolation seviyesi REPEATABLE READ, PostgreSQL'inki ise READ COMMITTED'dır. Bu, aynı MySQL transaction'ı içinde tekrarlanan bir SELECT'in, başka transaction'lar arada commit etse bile aynı snapshot'ı görmesi anlamına gelir; PostgreSQL'in varsayılanında ise her ifade en güncel commit edilmiş veriyi görür.
Mysql Innodb TransactionsZorluk 1
MySQL'de açık bir transaction'ı doğru şekilde başlatan ifade hangisidir?
- aBEGIN TRANSACTION WORK;
- bSTART TRANSACTION;✓
- cOPEN TRANSACTION;
- dTRANSACTION START;
Açıklama:START TRANSACTION; (veya kısaltılmışı BEGIN;) MySQL'de açık bir transaction başlatmanın standart yoludur. COMMIT veya ROLLBACK'e kadar o transaction için autocommit'i geçici olarak devre dışı bırakır.
Mysql Innodb TransactionsZorluk 2
Yeni bir MySQL oturumunda autocommit sistem değişkeninin varsayılan değeri nedir ve ne anlama gelir?
- aOFF — her ifade açıkça START TRANSACTION/COMMIT içine alınmalıdır
- bOFF — ifadeler açık bir FLUSH verilene kadar tamponlanır
- cON, ama yalnızca SELECT ifadelerine uygulanır, DML'e değil
- dON — session açıkça START TRANSACTION ile başlatılmadığı sürece her tek SQL ifadesi kendi transaction'ı olarak commit edilir✓
Açıklama:MySQL oturumları varsayılan olarak autocommit = ON'dur. Bu, tek başına çalıştırılan her ifadenin (ör. tek bir UPDATE), session açıkça START TRANSACTION ile bir çok-ifadeli transaction başlatmadığı sürece, çalıştıktan hemen sonra otomatik olarak commit edildiği anlamına gelir.
Mysql Innodb TransactionsZorluk 2
InnoDB'de mevcut açık transaction içinde yapılan tüm değişiklikleri geri almak için hangi SQL ifadesi kullanılmalı?
- aUNDO;
- bROLLBACK;✓
- cRESET TRANSACTION;
- dREVERT;
Açıklama:ROLLBACK;, transaction başladığından beri yapılan tüm değişiklikleri, InnoDB'nin undo log'unu kullanarak önceki satır versiyonlarını geri getirerek geri alır. COMMIT; ise bunun karşıtıdır ve değişiklikleri kalıcı hale getirir.
Mysql Innodb TransactionsZorluk 2
Bir SELECT'in okuduğu satırlar üzerinde exclusive satır kilidi alarak, mevcut transaction bitene kadar başka transaction'ların bu satırları update veya delete etmesini engelleyen SQL ifadesi hangisidir?
- aSELECT ... FOR UPDATE✓
- bSELECT ... WITH LOCK
- cSELECT ... EXCLUSIVE
- dSELECT ... FOR EXCLUSIVE READ
Açıklama:SELECT ... FOR UPDATE satırları okur ve üzerlerinde exclusive kilit alır; bu da mevcut transaction commit veya rollback olana kadar başka transaction'ların aynı satırları update, delete etmesini veya (isolation seviyesine bağlı olarak) kilitlemesini engeller.