Я понял, как оба эти средства контроля параллельности работают на простом английском языке. Однако меня больше интересовало, как пессимистический контроль должен выполняться в коде. Вот то, что я чувствую, давайте предположим, что два пользователя пытается обновить вики документаПессимистичная реализация оптимистического параллелизма
пессимистического контроль
Здесь, говорят нам использовать сделки.
BEGIN
SELECT DOC FROM WIKI WHERE DOC_ID = 1;
/* business logic */
UPDATE WIKI SET DOC = INPUT WHERE DOC_ID = 1;
END
Однако это все еще подвержено перезаписыванию предыдущих обновлений. Я чувствую, что в транзакции должна быть вторая проверка, чтобы увидеть, произошли ли какие-либо записи после оператора select, если да откат или фиксация. Я прав?
Если вы обеспокоены тем, что 'SELECT' и' UPDATE' будут работать с * различными * данными (поскольку другой пользователь сделал что-то между 'SELECT' и' UPDATE'), тогда ответ будет: нет, вы не должны волноваться * * ЕСЛИ ** вы находитесь в транзакции. Зачем? Поскольку транзакция изолирует среду, и вы работаете с данным * моментальным снимком *. Вам не нужно ничего блокировать, MySQL делает это для вас, если вы находитесь в транзакции. Вы можете проверить [доступные уровни изоляции для MySQL] (https://dev.mysql.com/doc/refman/5.7/en/innodb-transaction-isolation-levels.html) на странице руководства. –