java多线程    Java入门    vsftp    ftp    linux配置    centos    FRP教程    HBase    Html5缓存    webp    zabbix    分布式    neo4j图数据库    

MYSQL事务隔离

MYSQL的事务隔离级别理解

read-uncommitted 对应 P1 脏读;

read-committed 对应 P2 不可重复读;

repeatable-read 对应 P3 幻读;MYSQL默认级别

serializable 没有与之对应的异常现象。(发生大量锁,超时,等待)

MYSQL事务执行

  set tx_isolation='repeatable-read';

  select @@tx_isolation;

  start transaction;
  *****mysql select * from users....
  commit;
CREATE TABLE `users` (

  `id` int(11) NOT NULL,

  `score` int(11) NOT NULL

) ENGINE=InnoDB DEFAULT CHARSET=utf8;

INSERT INTO `users` (`id`, `score`) VALUES ('1', '90');

INSERT INTO `users` (`id`, `score`) VALUES ('2', '60');

INSERT INTO `users` (`id`, `score`) VALUES ('3', '50');

数据库结构

+------+------+

| id  | score|

+------+------+

|  1 |  95 |

|  2 |  60 |

|  3 |  50 |

+------+------+

P1:read-uncommitted

脏读:

读取到了未提交的数据

A事务:select score from users where id=2

-----B事务:update users set score = 85 where id=2

A事务:select score from users where id=2 //读到了没有被commit的值85

A事务的执行过程被B事务影响了

P2:read-committed

不可重复读

是说读的结果的行数不变或者减少,结果的内容发生变化;

A事务:select score from users where id=2

-----B事务:让score发生变化,两次读取值不同了update users set score = 85 where id=2;commit;

A事务:select score from users where id=2 //读到了被commit的值85

A事务的执行过程被B事务影响了

P3:repeatable-read

幻读

就是读的结果的行数变多了。

set tx_isolation='repeatable-read';

select @@tx_isolation;

在P3级别下

A事务:select score from users where id=2

-----B事务:让score发生变化,两次读取值不同了update users set score = 85 where id=2;commit;

A事务:select score from users where id=2 //A完全不受B的影响读到的值为60

结论:符合事务原则,完全没毛病.

幻读发生

A事务:select * from users where score > 80 and score <=100

-----B事务:如果中间有新的年龄的人加入两次读取记录数不同了 update user set score = 85 where id=2;commit;

A事务:select * from users where score > 80 and score <=100,

结论:将只读到一条记录,但是A经过commit以后,会读到2条(第二条是B改了一条)感觉发生了幻觉。这就是幻读。


This entry was posted in Linux, 数据库. Bookmark the permalink.
月小升QQ 2651044202, 技术交流QQ群 178491360
首发地址:月小升博客https://java-er.com/blog/mysql-start-transaction/
无特殊说明,文章均为月小升原创,欢迎转载,转载请注明本文地址,谢谢
您的评论是我写作的动力.

Leave a Reply