MySQL MV CC 2 транскрипции обновляют одну строку, выберите вопрос снимка - PullRequest
0 голосов
/ 07 августа 2020

MySQL версия: 5.7.29 Homebrew ДВИГАТЕЛЬ = InnoDB ПОВТОРНОЕ ЧТЕНИЕ

MV CC вопрос о снимке: таблица:

CREATE TABLE `r` (
  `id` int NOT NULL primary key auto_increment,
  `v` int not null
  ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
  
  insert into r values (1,1);
  

шаги:

----- транзакция A ------------- | транзакция B -------------------------------- | ----------------- ---------- --------- begin; ----------------- | - 1, выберите * из r; ------------- | - -------------------------------- | начать; -------------------------------- | обновить r установить v = v + 1, где id = 1; -------------------------------- | совершить; 2, выберите * из r; ------------- | - обновить r set v = v + 1, где id = 1; | - 3, выберите * из r; ------------- | - ---------- совершить; --------------- | -

шаги 1 и 2 v = 1, но почему шаг 3 v = 3, потому что MV CC Я думаю, что v должно быть 2. Пожалуйста, помогите мне.

1 Ответ

0 голосов
/ 07 августа 2020

Снимок состояния базы данных применяется к операторам SELECT внутри транзакции, не обязательно к операторам DML. Если вы вставляете или изменяете несколько строк, а затем фиксируете эту транзакцию, оператор DELETE или UPDATE, выпущенный из другой параллельной транзакции REPEATABLE READ, может повлиять на эти только что зафиксированные строки, даже если сеанс не может запросить их. Если транзакция обновляет или удаляет строки, зафиксированные другой транзакцией, эти изменения становятся видимыми для текущей транзакции. Например, вы можете столкнуться с такой ситуацией:

SELECT COUNT(c1) FROM t1 WHERE c1 = 'xyz';
-- Returns 0: no rows match.
DELETE FROM t1 WHERE c1 = 'xyz';
-- Deletes several rows recently committed by other transaction.

SELECT COUNT(c2) FROM t1 WHERE c2 = 'abc';
-- Returns 0: no rows match.
UPDATE t1 SET c2 = 'cba' WHERE c2 = 'abc';
-- Affects 10 rows: another txn just committed 10 rows with 'abc' values.
SELECT COUNT(c2) FROM t1 WHERE c2 = 'cba';
-- Returns 10: this txn can now see the rows it just updated.
...