Blokada wyłaczna

0

Nie rozumiem blokad wyłącznych (X). Z tego co wyczytałem to jeśli transakcja T1 blokuje tabelę trybem wyłącznym, to tylko ona uzyskuje prawo do wykonywania na niej zmian oraz odczytywania wartości.

Tymczasem, w mySQLu wykonuję następującą transakcje:

T1:

START TRANSACTION;
	LOCK TABLE dane WRITE;
	UPDATE dane SET x=2;
	UNLOCK TABLES;
COMMIT;

oraz T2

START TRANSACTION;
	UPDATE dane SET x=0;
COMMIT;

przy czym najpierw wywoływane są pierwsze trzy linijki transakcji T1, potem cała T2 i na końcu ostatnie dwie linijki T1 (z poziomu języka wysokiego poziomu).

Oczekiwałbym, że skoro T1 blokuje tabele i wykonuje na niej operacje to dopóki transakcja się nie zakończy to żadna inna nie będzie miała prawa dostępu do danych i ich zmieniania. Ale tak się niestety nie dzieje bo ostatecznie w tabeli dane na atrybucie x mam zera. Czyli ewidentnie widać, że T2 wykonała zapytanie mimo że T1 założyła blokadę...

0

wiesz, że tabele MyISAM nie mają transakcji?

0

To w takim razie w jaki sposób mogę przetestować transakcje i blokady u siebie na komputerze, na mojej własnej bazie? Dodam tylko, że blokada READ działa ok, tzn. polecenie LOCK TABLE dane READ; faktycznie uniemożliwia dokonywania zmian na danych tabeli, ale można te dane odczytywać.

0

Z tego co widzę, transakcje są w InnoDB. Wyczytałem, że są one mechanizmem domyślnym od mySQL 5.5. Ja działam na wersji 5.5.27, więc o co chodzi?

Poleceniem SHOW VARIABLES LIKE "%version%"; upewniłem się w powyższym fakcie. Dodatkowo na pierwszej pozycji wyskoczyło innodb_version 1.1.4.

1 użytkowników online, w tym zalogowanych: 0, gości: 1