Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Blokowanie pojedynczych rekordów
Forum PHP.pl > Forum > Bazy danych > MySQL
gamestaza
Witam.

Pomału uczę się MySQL i mam problem. Załóżmy, że mam w bazie danych tabelę a w niej wpisane rekordy:

  1. +----+----+----+
  2. | id | v1 | v2 |
  3. +----+----+----+
  4. | 1 | 1 | 1 |
  5. | 2 | 0 | 2 |
  6. | 3 | 3 | 3 |
  7. | 4 | 0 | 2 |
  8. +----+----+----+


Rozpoczynam transakcje. Chcę teraz zablokować jeden rekord (np. ten gdzie id=1) w sposób taki by nie blokować całej tabeli (tzn. gdy nasze zapytanie w innej sesji zwraca rekordy w śród których znajduje się zablokowany rekord(np. ten w którym id=1) to zwrócenie wyników nastąpi po zakończeniu transakcji, a gdy nie znajduje się zablokowany rekord to MySQL od razu zwróci wyniki)

Bardzo proszę o pomoc, wszelkie sugestie, poprowadzenie za rączkę przez ten skomplikowany świat mysql wstydnis.gif a najlepiej o jakiś dobry tutorial lub rozwiązanie mojego problemu.. Jeśli w sposób nie jasny został opisany mój problem proszę o dodatkowe pytania.

Pozdrawiam.
erix
Ale transakcję w sensie START TRANSACTION, czy transakcja jako z nazwy?

Bo na MyISAM możesz zapomnieć, to tak gwoli ścisłości.

A pod latarnią najciemniej: http://dev.mysql.com/doc/refman/5.0/en/inn...lock-modes.html
gamestaza
Coś tam poczytałem i dowiedziałem się kilku rzeczy. Dzięki, ale nadal nie potrafię zrobić tego o co mi chodziło, może (zdecydowanie) angielski mi nie służy..

Proszę o jakiś przykład.. Chcę zablokować nie całą tabelę, tylko rekord tak, że może go odczytać podczas jednej sesji (klient #1) a jeśli inny klient(#2) będzie chciał odczytać ten rekord to będzie musiał poczekać aż go odblokuję poprzedni klient(#1). Ważne dla mnie jest by klient (#2) mógł odczytywać z tabeli niezablokowane rekordy.

Proszę o wyrozumiałość i pomoc..

erix
A analizowałeś którekolwiek z zamieszczonych tam przykładowych zapytań?
gamestaza
Tak. I już wiem jak to zrobić. Dzięki. Mój błąd polegał głównie na tym że analizując pierwszy przykład utworzyłem tabelę ( jak w przykładzie:


  1. mysql> CREATE TABLE t (i INT) ENGINE = InnoDB;
  2. Query OK, 0 rows affected (1.07 sec)


oraz dodałem do niej kilka innych rekordów by lepiej to przeanalizować), ale z tego wszystkiego zapomniałem utworzyć klucza podstawowego (PRIMARY KEY), a bez tego jest niemożliwe to co chciałem osiągnąć..

I teraz wszystko działa.

Dziękuję za pomoc.

specool.gif
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.