关于mysql的一些基本问题

时间:2015-03-27 13:54:55

标签: mysql transactions

教师!

我刚刚面对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
    ) ;
    

    将&#34;不可重复读&#34;会发生什么?

1 个答案:

答案 0 :(得分:1)

1)在InnoDB中,默认情况下,隔离是REPEATABLE READ。通过锁定和版本控制,MySQL确保一旦你读取一行(或尝试读取一行,但没有找到它),那么在你的事务完成之前就不能更改该行,因为它会对它进行锁定

2)一般来说,当使用InnoDB时,您的更新将锁定第一个事务,第二个事务将等到锁定被释放然后成功进行更新。

3)在REPEATABLE READ的默认隔离中不可能进行不可重复的读取,由于读锁定,您的事务将不得不等待。

这里有很多信息要阅读: https://dev.mysql.com/doc/refman/5.6/en/innodb-transaction-model.html