Почему выберите ... для обновления с помощью подзадна создает снимок в MySQL, но вставьте ... выберите?MySql

Форум по Mysql
Ответить
Anonymous
 Почему выберите ... для обновления с помощью подзадна создает снимок в MySQL, но вставьте ... выберите?

Сообщение Anonymous »

Я пытаюсь понять, когда в MySQL создается последовательный снимок (чтение), особенно при повторяемом уровне изоляции чтения, что является по умолчанию для InnoDB.

Код: Выделить всё

CREATE TABLE table1 (
name VARCHAR(100) NOT NULL,
INDEX idx_table1_name (name)
);

CREATE TABLE table2 (
name VARCHAR(100) NOT NULL,
INDEX idx_table2_name (name)
);
case 1: выберите ... для обновления с помощью подразделения
транзакция 1:

Код: Выделить всё

START TRANSACTION;
SELECT * FROM table1
WHERE name = (
SELECT name FROM table2 WHERE name = 'a'
) FOR UPDATE;
транзакция 2:

Код: Выделить всё

START TRANSACTION;
INSERT INTO table2 VALUES ('b');
COMMIT;
обратно в транзакцию 1:

Код: Выделить всё

SELECT * FROM table2 WHERE name = 'b';
-- returns EMPTY SET
This shows that a snapshot was created at the time of the SELECT ... FOR UPDATE with subquery, since it cannot see the committed value 'b' from Transaction 2.
Case 2: INSERT INTO ... SELECT with subquery

Transaction 1:

Код: Выделить всё

START TRANSACTION;
INSERT INTO table1
SELECT 'c' FROM table2 WHERE name = 'a';
транзакция 2:

Код: Выделить всё

START TRANSACTION;
INSERT INTO table2 VALUES ('b');
COMMIT;
обратно в транзакцию 1:
SELECT * FROM table2 WHERE name = 'b';
-- returns 'b'
< /code>
Это означает, что вставка не было создано, и он может рассматривать совершенные данные из транзакции 2.
Согласно этой странице, обычный выбор ... для обновления рассматривается как операция DML, а не как обычный выбор. />[*]https://dev.mysql.com/doc/refman/8.4/en ... -read.html

Вопросы

Почему выбирает обновленную информацию с помощью Snapshot? Является ли вставка в ... выберите не создавать снимок на одном и том же уровне изоляции чтения?>

Подробнее здесь: https://stackoverflow.com/questions/796 ... sql-but-in
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «MySql»