Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> LOCK TABLES wewnątrz transakcji
RAM
post 27.11.2010, 03:34:19
Post #1





Grupa: Zarejestrowani
Postów: 36
Pomógł: 0
Dołączył: 7.10.2008

Ostrzeżenie: (0%)
-----


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.
Go to the top of the page
+Quote Post

Posty w temacie


Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 14.08.2025 - 08:20