教师!
我刚刚面对mysql交易,有些问题不清楚。
如果写一个复杂的语句,例如
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;会发生什么?
答案 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