Как обеспечить безопасность вашей транзакции sql? - PullRequest
0 голосов
/ 03 октября 2009

Возможно, этот вопрос вводит в заблуждение, но если вы можете ответить на него, сделайте это.

Я помню, как писал много вопросов по SQL, и время от времени кто-то говорил, что моя транзакция небезопасна. Я никогда не могу вспомнить случай. Что они?

IIRC, когда я читаю в начале таблицы, потом пишу позже, и, очевидно, другие транзакции могут писать, даже если ты еще не закончил? Я тоже не помню, как их исправить, в таком случае я должен делать фиктивных писателей? Но я уверен, что этот абзац совершенно неверен, поэтому возникает вопрос. Существуют ли случаи, когда ваши транзакции могут быть небезопасными, и что я могу сделать в качестве хорошей практики, чтобы сделать их безопасными?

Я в основном использую SQLite и иногда использую mysql

1 Ответ

0 голосов
/ 03 октября 2009

Вместо транзакций вы можете говорить о более широкой концепции блокировки , то есть об управлении упорядоченным одновременным доступом кбаза данных.
Эти две концепции независимы, но часто используются вместе (в частности, транзакции, как правило, предполагают некоторую форму блокировки, но также возможно ввести блокировки без какой-либо транзакции).Большинство СУБД, которые обеспечивают поддержку транзакций, предлагают определенные функции, такие как уровни изоляции транзакций, которые связывают две концепции вместе.

Цель транзакций состоит в обработке серии изменений в базе данных как ОДНА разовая операция .Таким образом, если каким-то образом один из шагов, связанных с этими изменениями, потерпит неудачу, SQL сможет «откатить» все изменения, сделанные в рамках транзакции.Это важно для обеспечения ссылочной целостности базы данных.Например, чтобы предотвратить добавление, скажем, новой записи Employee в базу данных, но не удалось связать эту запись в таблице Payroll.; -)

Цель Блокировка , то есть указание определенного списка временных правил, которые будут препятствовать доступу других пользователей СУБД (для записи ивозможно для чтения) частей базы данных, связанных с конкретными операциями CRUD (то есть операциями, которые изменяют содержимое базы данных).Идея состоит в том, чтобы запретить Алисе и Бобу одновременно пытаться уменьшить уровень запасов соды для офиса.Они (операторы SQL, которые они запускают на самом деле) могли реально прочитать текущее количество данного бренда содовой, уменьшить это значение на количество, которое они только что приняли, и сохранить новое количество обратно в базу данных.Поскольку оба они читают одно и то же исходное значение, изменение, выполненное первым из этих двух операторов SQL для завершения, будет перезаписано последним.

Блокировки (или уровни изоляции транзакций) могут быть сложны в настройке из-заих влияние на пропускную способность сервера SQL.Обычно это может привести к остановке конкретного запроса и ожиданию снятия блокировки.Существуют различные виды блокировок: уровень строки, уровень таблицы и т. Д., А также блокировка записи или read_and_write_lock.Можно представить, что если бы все стороны, использующие SQL-сервер, блокировали на уровне таблицы любой запрос, который они выполняли, количество обслуживаемых пользователей резко сократилось бы.В некоторых случаях возникает взаимоблокировка , например, когда конкретный оператор SQL блокирует определенный раздел таблицы, но затем ожидает завершения другого запроса и снимает его блокировку с другогоТаблица.Если другой запрос сам ожидает, когда первый запрос снимет свою блокировку с первой таблицы, у нас будет циклическая ситуация, которая будет длиться бесконечно (и не позволит другим запросам обращаться к данным, связанным с этими двумя блокировками!)

Дополнительная информация: Для MySql
Примечание: не все механизмы хранения в MySq1 поддерживают транзакции.
Уровни изоляции транзакций
Блокировки с хранилищем InnoDB
Для SqlLite
Синтаксис транзакции SqlLite
С SqlLite уровень транзакции определяется с помощью deferred , немедленное и исключительное ключевые слова.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...