К примеру, есть таблица с пользовательскими картинками:
CREATE TABLE `images` (
`user_id` int(11) NOT NULL,
`image` varchar(255) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
Есть требование: у каждого пользователя может быть не более 3 картинок.
Когда пользователь загружает картинки последовательно, то все просто:
$result = mysql_query( 'SELECT COUNT(*) FROM images WHERE user_id = 1' );
if( mysql_result( $result, 0 ) < 5 )
{
add_image( );
}
Что делать, если от пользователя одновременно придут несколько таких запросов на добавление картинок? В итоге у этого пользователя в таблице может оказаться больше записей, чем позволено.
Пока вижу два решения (ну и еще одно совсем бредовое):
1. Заблочить целиком таблицу на момент проверки/вставки новой записи
2. Использовать какой-нибудь механизм синхронизации PHP, например flock()
3. Отказаться от блокировок, пусть закачает сколько успеет. Потом подчистить лишние записи в cron-скрипте.
Как лучше сделать? Может есть другие способы?