Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: LOCK TABLES wewnątrz transakcji
Forum PHP.pl > Forum > Bazy danych > MySQL
RAM
Dzień dobry,
Moja witryna w PHP5+MySQL składa się zasadniczo z trzech stron:
1. enter_announcement.php - wprowadzanie/edycja ogłoszenia
2. submit_announcement.php - dodanie/modyfikacja ogłoszenia w bazie
3. summary.php - wyświetlenie podsumowania.
Dokładniej rozwiązanie działa tak, że strona enter_announcement.php na submicie ma stronę submit_announcement.php, która na koniec dopiero wywołuje summary.php.
Numer ogłoszenia składa się z trzech części: rok, miesiąc, numer w miesiącu.
Oto szkic submit_announcement.php:

START TRANSACTION
LOCK TABLES announcements WRITE
if (empty($_POST['full_announcement_no'])) { // nowe ogłoszenie
$announcement = new Announcement;
$announcement->initializeWithPOST();
INSERT INTO announcements z nowym numerem MAX+1
} else { // modyfikacja ogłoszenia
$announcement = new Announcement;
$announcement->initializeWithPOST();
$announcement->initializeWithNumber($_POST['full_announcement_no']));
UPDATE announcements
}
UNLOCK TABLES
COMMIT
header('Location: summary.php');

Problem w tym, że nie jestem pewien czy wewnątrz transakcji instrukcja LOCK TABLES jest potrzebna. Tabele blokuje ze względu na współbieżność generowania numerów ogłoszeń (SELECT MAX(no)+1 FROM announcements WHERE year=bieżący AND month=bieżący).
Byłbym wdzięczny za informację, czy wewnątrz tranakcji lokowanie jest potrzebne.
Mephistofeles
Po co transakcja do jednej operacji na bazie?
RAM
Ściśle rzecz biorąc operacji jest więcej (np. dodawanie uploadowanych obrazków do tabeli pictures), a ja podałem tylko to co istotne.
Możesz mi odpowiedzieć na moje pytanie?
Mephistofeles
Używa się albo transakcji, albo blokowania, transakcja wystarczy. Aczkolwiek dobrze by było, żeby wypowiedział się ktoś jeszcze, bo nie jestem o tym jednak do końca przekonany.
RAM
Czy ktoś mógłby mi pomóc?
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.