Mam dziwny problem (przynajmniej dla mnie :)) z blokadą MySQL.WYBIERZ MYSQL DO AKTUALIZACJI - dziwny numer
Mam tabeli:
create table `test` (
`id` int(11) NOT NULL AUTO_INCREMENT,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=13 DEFAULT CHARSET=latin1
Z tych danych:
+ ---- +
| id |
+ ---- +
| 3 |
| 4 |
| 5 |
| 6 |
| 7 |
| 8 |
| 10 |
| 11 |
| 12 |
+ ---- +
Teraz mam 2 klientów z tych poleceń wykonywanych na początku:
zestaw AUTOCOMMIT = 0;
zestaw szeregowalny poziom izolacji transakcji sesji;
Rozpocznij;
Teraz najciekawsza część. Pierwszy klient wykonuje to zapytanie: (tworzy intencję wstawienia wiersza o identyfikatorze równym 9)
SELECT * z testu gdzie id = 9 FOR UPDATE;
zbiór pusty (0,00 s)
Następnie drugi klient ma takie same:
SELECT * z testów gdzie id = 9, dla aktualizacji;
Empty set (0.00 sec)
Moje pytanie brzmi: Dlaczego drugi klient nie blokuje? Wyłączna blokada luki powinna zostać ustawiona przy pierwszym zapytaniu, ponieważ FOR UPDATE zostały użyte, a drugi klient powinien blokować.
Jeśli się mylę, czy ktoś mógłby mi powiedzieć, jak zrobić to poprawnie?
Wersja MySQL używam to: 5.1.37-1ubuntu5.1
Nie blokuje, ponieważ udało się zablokować ** zero ** wierszy. – Pacerier