Здравствуйте! очень интересный для меня и пока непонятный вопрос.
Делаю web-приложение для удобства на работе с одновременным доступом 3-х администраторов...
Есть операции сложные (вложенные), которые вносят изменения сразу в несколько таблиц, но поочередно, исходя из условий выполнения предыдущих запросов к базе, а есть которые напрямую работают с 1 таблицей.
Вот я сижу и пытаюсь выяснить, а могут ли быть коллизии при одновременной работе с таблицами БД? ну то есть когда один админ запустил скрипт, тот молотит, а через секунду второй админ напрямую к таблице обратился...
Почитал несколько открытых учебников, но там на такой вопрос ответы какие-то неоднозначные.. а в некоторых вообще это не затрагивается...
Может вы мне ответите люди добрые? может как-то надо таблицу операций делать и оттуда в порядке очереди брать ??? как вообще это правильно делать?
Смотрите в разделы транзакционной обработки данных; транзакции и изоляция транзакций. По этой теме книги пишут вот уже полвека минимум.
Коллизии конечно могут быть если об этом не думать во время разработки. Жертвовать конкурентностью и принудительно выполнять задачи в один поток - да, бывает и такое.
да, я читал про уровни изоляции (SERIALIZABLE, READ COMMITTED...) единственное что я вынес из открытых источников - это то, что они есть. ну есть наверное хорошие книги пишут как правильно назначать типы таблиц для ускорения работы (MyISAM или InnoDB) во избежания блокировки, но не нашел где бы на примере разобрали эти "Толстые транзакции" или дали бы ряд советов при разработке приложения.... ( ну например разбивайте по максимуму запросы... или наоборот, при селекте объединяйте их...)
ну везде только описание что такое встречается... и проверки... везде показательные выступления...
нет нигде размышлений по вопросу выполнения задач в один поток (пишут или "это правильно" или "это неправильно") ))))