数据库隔离级别
来源:互联网 发布:手机淘宝加不了购物车 编辑:程序博客网 时间:2024/05/17 06:13
数据库隔离级别有四种,应用《高性能mysql》一书中的说明:
不可重复读的重点是修改:
同样的条件, 你读取过的数据, 再次读取出来发现值不一样了
幻读的重点在于新增或者删除
同样的条件, 第1次和第2次读出来的记录数不一样
当然, 从总的结果来看, 似乎两者都表现为两次读取的结果不一致.
但如果你从控制的角度来看, 两者的区别就比较大
对于前者, 只需要锁住满足条件的记录
对于后者, 要锁住满足条件及其相近的记录
然后说说修改事务隔离级别的方法:
1.全局修改,修改mysql.ini配置文件,在最后加上
1 #可选参数有:READ-UNCOMMITTED, READ-COMMITTED, REPEATABLE-READ, SERIALIZABLE.2 [mysqld]3 transaction-isolation = REPEATABLE-READ
这里全局默认是REPEATABLE-READ,其实MySQL本来默认也是这个级别
2.对当前session修改,在登录mysql客户端后,执行命令:
要记住mysql有一个autocommit参数,默认是on,他的作用是每一条单独的查询都是一个事务,并且自动开始,自动提交(执行完以后就自动结束了,如果你要适用select for update,而不手动调用 start transaction,这个for update的行锁机制等于没用,因为行锁在自动提交后就释放了),所以事务隔离级别和锁机制即使你不显式调用start transaction,这种机制在单独的一条查询语句中也是适用的,分析锁的运作的时候一定要注意这一点
再来说说锁机制:
共享锁:由读表操作加上的锁,加锁后其他用户只能获取该表或行的共享锁,不能获取排它锁,也就是说只能读不能写
排它锁:由写表操作加上的锁,加锁后其他用户不能获取该表或行的任何锁,典型是mysql事务中的
锁的范围:
行锁: 对某行记录加上锁
表锁: 对整个表加上锁
这样组合起来就有,行级共享锁,表级共享锁,行级排他锁,表级排他锁
start transaction;
select * from user where userId = 1 for update;
执行完这句以后
1)当其他事务想要获取共享锁,比如事务隔离级别为SERIALIZABLE的事务,执行
select * from user;
将会被挂起,因为SERIALIZABLE的select语句需要获取共享锁
2)当其他事务执行
select * from user where userId = 1 for update;
update user set userAge = 100 where userId = 1;
也会被挂起,因为for update会获取这一行数据的排它锁,需要等到前一个事务释放该排它锁才可以继续进行
-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
共享锁(S锁):如果事务T对数据A加上共享锁后,则其他事务只能对A再加共享锁,不能加排他锁。
获准共享锁的事务职能读取数据,不能修改数据。
排他锁(X锁):如果事务T对数据A加上排他锁后,则其他事务不能在对A加任何类型的封锁。
获准排他锁的事务既能读取数据,也能修改数据。
数据库死锁的原因:若干事务相互等待对方释放封锁,就陷入了无限期等待状态,系统进入死锁。
预防数据库死锁的方法:1、要求一个事务必须一次性封锁所需要的所有数据(要么全成功,要么全部成功)
2、规定封锁数据的顺序,所有事务必须按照这个顺序实行封锁
解除数据库死锁的方法:允许死锁发生,然后解除它,如果发现死锁,则将其中一个代价较小的事务撤销,回滚这个事务,并释放此事务持有的封锁,使其他事务继续进行。
- 数据库隔离级别。。。
- 数据库事务隔离级别
- 数据库隔离级别
- 数据库隔离级别
- 数据库事务隔离级别
- INFORMIX数据库隔离级别
- 数据库隔离级别
- 数据库隔离级别
- 数据库隔离级别
- 数据库的隔离级别
- 数据库的隔离级别
- 数据库隔离级别
- 数据库事物隔离级别
- 数据库事物隔离级别
- 数据库事务隔离级别
- 数据库事务隔离级别
- 数据库隔离级别
- 数据库事务隔离级别
- 在Ubuntu下如何切换到超级用户
- C# WAV 音频文件处理类 以及 音频转码处理
- 修改UbuntuKylin和Windows共存的GRUB2启动顺序
- Vim编辑器在Windows下编码设置问题
- 222222222222222222
- 数据库隔离级别
- IOS Table中Cell的重用reuse机制分析
- LA 4818 Largest Empty Circle on a Segment 开区间求并集
- html5 record 录音实例 使用websocket
- (16)CSS定位布局
- iOS App性能优化
- 《看板方法-科技企业渐进变革成功之道》书摘笔记【第3章】
- The Dirichlet Distribution 狄利克雷分布 (PRML 2.2.1)
- FFT