MySQL

:: DEVELOPER ZONE

Login / Register

  • MySQL.com
  • Developer Zone
  • Partners
  • Online Shop
  • Downloads
  • Documentation
  • Forums
  • Lists
  • Bugs
  • Events
  • User Groups
  • Guilds
  • Blogs
  • Support
  • Resources
  • Books
  • FAQ

Справочное руководство по MySQL 4.0. :: 7 Типы таблиц MySQL :: 7.5 Таблицы InnoDB :: 7.5.8 Транзакционная модель InnoDB :: 7.5.8.6 Пример работы согласованного чтения в InnoDB

  • Overview
  • MySQL Reference Manual
  • MaxDB Documentation
  • Connectors

Search the MySQL manual:


  • Справочное руководство по MySQL 4.0.

  • 7.5.8 Транзакционная модель InnoDB
  • 7.5.8.1 Согласованное чтение
  • 7.5.8.2 Чтение с блокировкой
  • 7.5.8.3 Блокировка следующего ключа: устранение проблемы с фантомом
  • 7.5.8.4 Блокировка, осуществляемая различными операторами SQL в InnoDB
  • 7.5.8.5 Обнаружение и откат взаимоблокировки (deadlock)
  • 7.5.8.6 Пример работы согласованного чтения в InnoDB
  • 7.5.8.7 Каким образом избежать взаимоблокировок (deadlock)?
  • 7.5.8.8 Рекомендации по увеличению производительности
  • 7.5.8.9 InnoDB Monitor

Get the MySQL Language Reference and MySQL Administrator's Guide from MySQL Press!


Additional languages

  • German


Learn about new MySQL releases, technical articles, events and more.

Subscribe to the monthly MySQL Newsletter!


Previous / Next / Up / Table of Contents

7.5.8.6. Пример работы согласованного чтения в InnoDB

Допустим, вы используете уровень изоляции, установленый по умолчанию - REPEATABLE READ. При выполнении согласованного чтения (т.е. обычного оператора SELECT) InnoDB определяет для транзакции момент времени, по состоянию на который запросу будет предоставляться информация из базы данных. Таким образом, если транзакция удаляет строку и фиксирует это изменение после назначенного момента времени, то вы не увидите, что строка была удалена. Это справедливо также для вставок и обновлений.

Чтобы такой момент времени ``передвинуть вперед'', нужно зафиксировать транзакцию, а затем выполнить новую команду SELECT.

Это называется многовариантным контролем совпадений.

     Пользователь A     Пользователь B

    SET AUTOCOMMIT=0; SET AUTOCOMMIT=0;

время
|     SELECT * FROM t;
|   пустой набор данных
|         INSERT INTO t VALUES (1, 2);
|
v     SELECT * FROM t;
    пустой набор данных
          COMMIT;
    SELECT * FROM t;
    пустой набор данных;

    COMMIT;

    SELECT * FROM t;
    ---------------------
    | 1 | 2 |
    ---------------------

Таким образом, пользователь A увидит строку, вставленную пользователем B только после того, как B зафиксирует вставку, и A зафиксирует свою собственную транзакцию, чтобы момент времени передвинулся на позицию, находящуюся после фиксации, произведенной пользователем B.

Чтобы увидеть ``самое свежее'' состояние базы данных, необходимо использовать чтение с блокировкой:

SELECT * FROM t LOCK IN SHARE MODE;

This is a translation of the MySQL Reference Manual that can be found at dev.mysql.com. The original Reference Manual is in English, and this translation is not necessarily as up to date as the English version.

Top / Previous / Next / Up / Table of Contents

© 1995-2005 MySQL AB. All rights reserved.

  • About MySQL
  • Careers
  • Site Map
  • Contact Us
  • Legal
  • Privacy Policy
  • Trademark Info
  • No Software Patents!