Почему выберите ... для обновления с помощью подзадна создает снимок в 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 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • Использование подзадна с codeigniter, где в пункте
    Anonymous » » в форуме Php
    0 Ответы
    20 Просмотры
    Последнее сообщение Anonymous
  • Использование подзадна с codeigniter, где в пункте
    Anonymous » » в форуме Php
    0 Ответы
    4 Просмотры
    Последнее сообщение Anonymous
  • Group_concat в левом соединении подзадна очень медленно
    Anonymous » » в форуме MySql
    0 Ответы
    6 Просмотры
    Последнее сообщение Anonymous
  • Jetpack создает снимок потока. Flow не работает должным образом.
    Anonymous » » в форуме Android
    0 Ответы
    6 Просмотры
    Последнее сообщение Anonymous
  • Вставьте значение в поле поиска и выберите раскрывающийся список.
    Anonymous » » в форуме Python
    0 Ответы
    10 Просмотры
    Последнее сообщение Anonymous

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