@xamil:
Ad. 1 Coś takiego było również w PHP4, ponieważ tranzakcje to nie jest element składni PHP tylko jest to element języka SQL:
<?php
// To jest przykład dla PHP < 5
$s = mysql_query('SELECT * FROM some_table;',$resource); $i = mysql_query('INSERT INTO some_table (some_col1,some_col2) VALUES ('.$some_val1.','.$some_val2.');',$resource); if ( ! $i ) {
// Kiedy coś nie poszło tak jak miało pójść cofamy tranzakcję, czyli przywracamy s
tan bazy sprzed rozpoczęcia tranzakcji
} else {
// Jeśli wszystko jest ok zatwierdzamy zmiany
}
// W PHP 5 przy użyciu PDO, nie trzeba wykonywać zapytań odnośnie tranzakcji bo sł
użą do tego metody:
// beginTransaction(), commit(), a także rollBack()
?>
Ad. 2 Patrz kod powyżej, jak można to zrobić z poziomu PHP i wtedy aplikacja nie musi się tym przejmować. Odnośnie zrobienia tego na samej bazie: nie da się tego tak prosto zrobić

, a nawet jeśli udałoby się coś takiego ustawić, to skutki tego byłyby opłakane (wysoki czas wykonania zapytań, itd...)
Ad. 3 Wszystko zależy od jakości twego kodu. Jeśli będzie on napisany z głową to na wydajności nie stracisz

. Inaczej ma się sprawa z logicznym podejściem bo tranzakcje stosuje się raczej do kilku powiązanych ze sobą insert'ów lub update'ów (oczywiście czasem zachodzi potrzeba na komendzie select, ale to na prawdę rzadko) .
Ad. 4 Oczywiście, że powinieneś się tym przejmować, bo aby twoja aplikacja działała dobrze przy dużej ilości odwiedzin, czyli przy kilkudziesięciu wykonaniach skryptu na sekundę. Szansa, że coś się wbije pomiędzy te zapytania jest wprostproporcjonalna do ilości odwiedzin strony/serwisu www. Im więcej odwiedzin tym większe prawdopodobieństwo, że jednak ktoś trafi w przerwe i będzie źle

Niestety nie ma żadnej alternatywy, jeśli idzie o ten problem (blokowania dostępu do danych). Niekoniecznie skrypt musi działać na tych samych danych

Jeśli, np.: wyświetlasz, a nie obrabiasz (dane) to nic nie szkodzi, jeśli gdzieś po drodze zostanie dodana grupa rekordów (według odpowiedniego schematu wprowadzania danych).
Mam nadzieję, że zrozumiałeś temat

@kwiateusz:
Wiele baz ma swoje wewnętrzne systemy blokowania i izolacji zapytań na bazie (np. Microsoft SQL Server, Oracle, itd...). My możemy wymusić dodatkową izolację, bądź też blokadę. Z tym, że domyślne mechanizmy blokowania i izolacji operują na samych tabelach, tak by jakieś inne zapytanie nie rozwalilo struktury tabeli. Taka blokada jest ściągana po wykonaniu zapytania.