Но вот бывает нужно сделать такую простую операцию как, скажем, увеличить текущее значение какого-либо счётчика. в общем, изменить значение, взяв за основу текущее. В SQL это можно было бы сделать одним запросом. Т.е. атомарно. А в CMS в интерфейсе её хранилища данных надо прописать операцию, которая сделает это. И то мы будем ограничены в выборе возможных действий (или придётся делать довольно неслабые навороты, чтобы дать пользователю писать формулу для изменения значения).
Грабли на этом пути нас поджидают: либо мы реализуем такое подмножество операций, которое есть у всех предполагаемых СУБД, либо придётся как-то правильно обрабатывать случай, если используемая СУБД не имеет нужной операции.
С точки зрения простоты реализации только и остаётся, что ставить на кусок данных блокировку, тащить данные в нашу программу, там изменять, записывать обратно, блокировку снимать. Итак эти блокировщики устроить, чтобы не забывать их все снимать не позднее окончания обработки запроса. Ну и смириться с тем, что для простой операции изменения одного числового поля мы сначала потащим данные из базы в приложение, там их обернём в принятый в нашем движке вид (в лучшем случае просто хэш, а то и, чего доброго, полноценный объект, а потом изменённые данные записывать обратно в базу. И счастье нам будет, если СУБД работает на том же компьютере. Ну ладно, путь и в другой виртуалке, ну прогуляются данные туда-обратно по внутренней петле TCP/IP...
Эх...