Оптимистическая блокировка в MySQL: подробное объяснение
Оптимистическая блокировка — это метод, используемый в системах управления базами данных для предотвращения конфликтов данных, которые могут возникнуть, когда несколько пользователей пытаются одновременно обновить одни и те же данные. Хотя MySQL изначально не поддерживает оптимистическую блокировку, ее можно реализовать с помощью стандартных инструкций SQL. часто изменяться несколькими пользователями. Вместо блокировки данных этот метод позволяет выполнять одновременные обновления, но проверяет наличие конфликтов перед фиксацией изменений.
Реализация в MySQL
Один метод реализации оптимистичных блокировка в MySQL осуществляется путем добавления столбца версии в таблицу. При обновлении строки столбец версии увеличивается. Перед фиксацией обновления приложение проверяет, соответствует ли текущий номер версии номеру версии, хранящемуся в строке на момент запуска обновления. Если числа совпадают, обновление фиксируется; в противном случае возник конфликт, и приложение должно обработать его соответствующим образом.
Пример кода
Следующий фрагмент кода демонстрирует оптимистическую блокировку с использованием столбца версии:
-- выберите строку и ее версию ВЫБЕРИТЕ значение 1, значение 2, версию ИЗ Таблицы ГДЕ iD = @theId; -- Рассчитать новые значения -- ... -- Обновляем таблицу, проверяя версию ОБНОВИТЬ таблицу SET val1 = @newVal1, val2 = @newVal2, версия = версия 1 ГДЕ iD = @theId И версия = @oldversion; -- Проверьте затронутые строки ЕСЛИ @@ROWCOUNT = 1 -- Зафиксируйте изменения -- ... ЕЩЕ -- Обработка столкновений -- ... END IF;
Транзакции и нетранзакции
-- Select the row and its version
SELECT val1, val2, version
FROM theTable
WHERE iD = @theId;
-- Calculate new values
-- ...
-- Update the table, checking the version
UPDATE theTable
SET val1 = @newVal1,
val2 = @newVal2,
version = version 1
WHERE iD = @theId
AND version = @oldversion;
-- Check for affected rows
IF @@ROWCOUNT = 1
-- Commit the changes
-- ...
ELSE
-- Handle collision
-- ...
END IF;
Вывод
Оптимистическая блокировка не является встроенной функцией. особенность MySQL, но ее можно реализовать с помощью стандартных инструкций SQL. Добавив столбец версии в таблицу, приложения могут выполнять оптимистическую блокировку и обнаруживать конфликты перед фиксацией обновлений, обеспечивая согласованность данных в параллельных средах.
Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.
Copyright© 2022 湘ICP备2022001581号-3