Lockowanie w MySQL dla InnoDB

0

Jakie rekordy są lockowane w transakcji MySQL dla tablic InnoDB przy wywołaniach różnych komend (Update, Select (lockujące) Delete)?
Chodzi mi o to:
a) Jak warunek komendy (where) dotyczy jednego konkretnego rekordu (np. where id = 5) to blokowany jest tylko ten rekord?
b) Jak warunek komendy dotyczy zakresu (np. where id>20) to czy blokowany jest tylko wyszukany przedział rekordów czy cały przeszukiwany zakres (czyli wszystkie rekordy)?

0

tylko te, które spełniają warunek. BTW delete nic nie blokuje - delete usuwa

0

No właśnie mam z tym problem bo jak czytam dokumentacje SQL to wynika że metody dla których warunek "where" jest określony na podstawie jakiegoś indexu tabeli lockują tylko wybrane rekordy a gdy warunek jest ustawiony dla zwykłej kolumny to cała tabela jest blokowana. Trochę dziwne ale sprawdzam na przykładach w swojej bazie i trochę się to zgadza. Ma ktoś jakiś polski manual o "lockowaniu" bo może ja coś mylę w tłumaczeniu z angielskiego.?

http://dev.mysql.com/doc/refman/5.0/en/innodb-locks-set.html

Przykłady robię dla izolacji Repeatable Read.
W Read Committed wszystko działa tak jak trzeba, blokowane są tyko rekordy wybrane.

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