时间:2021-07-01 10:21:17 帮助过:11人阅读
通常数据库有四种不同的事务隔离级别:
隔离级别 | 脏读 | 不可重复读 | 幻读 |
Read uncommitted | √ | √ | √ |
Read committed | × | √ | √ |
Repeatable read | × | × | √ |
Serializable | × | × | × |
大多数数据库的默认的事务隔离级别是提交读(Read committed),而MySQL的事务隔离级别是重复读(Repeatable read)。对于丢失更新,只有在序列化(Serializable)级别才可得到彻底解决。不过对于高性能系统而言,使用序列化级别的事务隔离,可能引起死锁或者性能的急剧下降。因此使用悲观锁和乐观锁十分必要。 并发系统中,悲观锁(Pessimistic Locking)和乐观锁(Optimistic Locking)是两种常用的锁:
***
以mysql为例子:
myisam存储引擎使用表缩
innodb使用行锁(明确指定了主键的情况下,否则也是表锁)与表锁
一般的做法是:
1 开启事务
2 进行数据更改
3 回滚或者提交
在具体的业务逻辑中,由于隔离机制的不同,导致结果的不同.
乐观锁与悲观锁使用的也比较多.
由于悲观锁在开始读取时即开始锁定,因此在并发访问较大的情况下性能会变差。对MySQL Inodb来说,通过指定明确主键方式查找数据会单行锁定,而查询范围操作或者非主键操作将会锁表。
php使用数据库的并发问题(乐观锁与悲观锁)
标签:font width 通过 提交 tab mysql 数据不一致 逻辑 否则