Вместо транзакций вы можете говорить о более широкой концепции блокировки , то есть об управлении упорядоченным одновременным доступом кбаза данных.
Эти две концепции независимы, но часто используются вместе (в частности, транзакции, как правило, предполагают некоторую форму блокировки, но также возможно ввести блокировки без какой-либо транзакции).Большинство СУБД, которые обеспечивают поддержку транзакций, предлагают определенные функции, такие как уровни изоляции транзакций, которые связывают две концепции вместе.
Цель транзакций состоит в обработке серии изменений в базе данных как ОДНА разовая операция .Таким образом, если каким-то образом один из шагов, связанных с этими изменениями, потерпит неудачу, SQL сможет «откатить» все изменения, сделанные в рамках транзакции.Это важно для обеспечения ссылочной целостности базы данных.Например, чтобы предотвратить добавление, скажем, новой записи Employee в базу данных, но не удалось связать эту запись в таблице Payroll.; -)
Цель Блокировка , то есть указание определенного списка временных правил, которые будут препятствовать доступу других пользователей СУБД (для записи ивозможно для чтения) частей базы данных, связанных с конкретными операциями CRUD (то есть операциями, которые изменяют содержимое базы данных).Идея состоит в том, чтобы запретить Алисе и Бобу одновременно пытаться уменьшить уровень запасов соды для офиса.Они (операторы SQL, которые они запускают на самом деле) могли реально прочитать текущее количество данного бренда содовой, уменьшить это значение на количество, которое они только что приняли, и сохранить новое количество обратно в базу данных.Поскольку оба они читают одно и то же исходное значение, изменение, выполненное первым из этих двух операторов SQL для завершения, будет перезаписано последним.
Блокировки (или уровни изоляции транзакций) могут быть сложны в настройке из-заих влияние на пропускную способность сервера SQL.Обычно это может привести к остановке конкретного запроса и ожиданию снятия блокировки.Существуют различные виды блокировок: уровень строки, уровень таблицы и т. Д., А также блокировка записи или read_and_write_lock.Можно представить, что если бы все стороны, использующие SQL-сервер, блокировали на уровне таблицы любой запрос, который они выполняли, количество обслуживаемых пользователей резко сократилось бы.В некоторых случаях возникает взаимоблокировка , например, когда конкретный оператор SQL блокирует определенный раздел таблицы, но затем ожидает завершения другого запроса и снимает его блокировку с другогоТаблица.Если другой запрос сам ожидает, когда первый запрос снимет свою блокировку с первой таблицы, у нас будет циклическая ситуация, которая будет длиться бесконечно (и не позволит другим запросам обращаться к данным, связанным с этими двумя блокировками!)
Дополнительная информация: Для MySql
Примечание: не все механизмы хранения в MySq1 поддерживают транзакции.
Уровни изоляции транзакций
Блокировки с хранилищем InnoDB
Для SqlLite
Синтаксис транзакции SqlLite
С SqlLite уровень транзакции определяется с помощью deferred , немедленное и исключительное ключевые слова.