2015-03-27 3 views
-4

учителей!Несколько основных вопросов о mysql

Я недавно столкнулся с транзакциями mysql, и некоторые вопросы не ясны.

  1. Если «грязное чтение», «не повторяемое чтение» или «фантомное чтение», произойдет ли сделка успешно?
  2. Если два клиента одновременно обновляют одну строку, но устанавливают разные столбцы, будут ли возникать проблемы? Как работает mysql с обновлением? скопировать/изменить/переписать всю строку или просто изменить измененное поле отдельно?
  3. Если написать сложное заявление, такое как

    CREATE OR REPLACE VIEW View_Rank AS (
        SELECT 
         (
          SELECT 
           COUNT(1) + 1 
          FROM 
           tb_Rank AS a 
          WHERE 
           a.DId = b.DId 
          AND (
           a.Points > b.Points 
           OR (
            a.Points = b.Points 
            AND (
             a.PlayTime < b.PlayTime 
             OR (
              a.PlayTime = b.PlayTime AND a.Id < b.Id 
             ) 
            ) 
           ) 
          ) 
         ) AS Rank, 
         b.PersonId, 
         b.DId 
        FROM 
         tb_Rank AS b 
    ) ; 
    

    Будет «не повторяемые чтения» происходит?

ответ

1

1) В InnoDB по умолчанию изоляция REPEATABLE READ. За счет блокировки и управления версиями MySQL гарантирует, что после того, как вы прочитаете строку (или попытаетесь прочитать строку и не найдете ее), эту строку нельзя изменить до тех пор, пока ваша транзакция не закончится, поскольку она блокирует ее.

2) Вообще говоря, при использовании InnoDB ваше обновление блокирует первую транзакцию, а вторая будет ждать освобождения блокировки и затем успешно выполнить обновление.

3) Непрерывные чтения невозможны при изоляции по умолчанию REPEATABLE READ, из-за блокировки чтения ваша транзакция будет ждать.

Много информации читать здесь: https://dev.mysql.com/doc/refman/5.6/en/innodb-transaction-model.html

+1

Спасибо! Это прекрасный ответ. –

Смежные вопросы