欢迎访问悦橙教程(wld5.com),关注java教程。悦橙教程  java问答|  每日更新
页面导航 : > > 文章正文

浅谈数据库事务隔离,

来源: javaer 分享于  点击 3249 次 点评:250

浅谈数据库事务隔离,


事务隔离主要是针对ACID中的 I 隔离性设置的,在了解这几种数据库事务之前需要先了解几个重要概念:

  • 脏读 - 事务1(READ)访问了事务2(WRITE)未提交的事务

    2154loev8R53

  • 幻读 - 一个事务读取了2次,得到的结果不一样

    2155aZxX8o26

  • 不可重复读 - 一个事务读取同一条记录2次,得到的结果不一致

    2156wuH3uE40

为了解决上面的三个问题,有四种数据库隔离级别

事务隔离级别越高,数据的完整性和一致性越好,但会影响并发性能。mysql默认使用 Repeatable Read 级别,而aliyun rds 默认使用 READ COMMITTED。

查看查询数据库隔离级别

select @@global.tx_isolation;

Mysql 8.0 以上需要使用

select @@transaction_isolation;

修改事务隔离级别:mysql.ini

#可选参数有:READ-UNCOMMITTED, READ-COMMITTED, REPEATABLE-READ, SERIALIZABLE.
[mysqld]
transaction-isolation = REPEATABLE-READ

当然,也可以只对当前session修改

mysql> set session transaction isolation level read uncommited;

锁机制

共享锁:由读表操作加上的锁,加锁后其他用户只能获取该表或行的共享锁,不能获取排它锁,也就是说只能读不能写

排它锁:由写表操作加上的锁,加锁后其他用户不能获取该表或行的任何锁,典型是mysql事务中的

锁的范围:

行锁: 对某行记录加上锁

表锁: 对整个表加上锁

本文由 歧途老农 创作,采用 CC BY 4.0 CN 协议 进行许可。 可自由转载、引用,但需署名作者且注明文章出处。

相关文章

    暂无相关文章
相关栏目:

用户点评