引言为什么需要锁(并发控制)? 在多用户环境中,在同一时间可能会有多个用户更新相同的记录,这会产生冲突。这就是著名的并发性问题。典型的冲突有:丢失更新:一个事务的更新覆盖了其它事务的更新结果,就是所谓的更新丢失。例如:用户A把值从6改为2,用户B把值从2改为6,则用户A丢失了他的更新。脏读:当一个....
分类:
其他好文 时间:
2016-01-18 20:37:45
阅读次数:
182
关于mysql中的锁在并发环境下,有可能会出现脏读(Dirty Read)、不可重复读(Unrepeatable Read)、 幻读(Phantom Read)、更新丢失(Lost update)等情况,所以mysql引入了很多锁的概念MySQL InnoDB对数据行的锁定类型一共有四种:共享锁(读...
分类:
数据库 时间:
2015-12-13 20:20:46
阅读次数:
297
一、并发问题的产生 多线程/进程同时操作(读/写)同一数据 二、并发问题的种类 丢失更新(lost update) 第一类更新丢失(回滚丢失): 当2个事务更新相同的数据源,如果第一个事务被提交,而另外一个事务却被撤销,那么会连同第一个事务所做的跟新也被撤销。也就是说第一个事务做的跟新丢失了。 第二...
分类:
其他好文 时间:
2015-07-25 12:06:41
阅读次数:
127
为什么需要锁(并发控制)? 在多用户环境中,在同一时间可能会有多个用户更新相同的记录,这会产生冲突。这就是著名的并发性问题。 典型的冲突有: l 丢失更新:一个事务的更新覆盖了其它事务的更新结果,就是所谓的更新丢失。例如:用户A把值从6改为2,用户B把值从2改为6,则用户A丢失了他的更新。 ...
分类:
其他好文 时间:
2015-07-09 13:01:59
阅读次数:
89
【并发读问题】【第一类更新丢失】撤销时,覆盖更新数据。【脏读】读到未提交的更新。待定状态。【虚读】其他事务已提交的插入数据。事务T1读取某一数据后,事务T2对其做了修改,当事务T1再次读该数据时得到与前一次不同的值。【不可重复读】未避免“随时更新”。一个事务对同一行数据重复读取两次,但是却得到了不同...
分类:
其他好文 时间:
2015-07-04 00:38:35
阅读次数:
216
悲观锁:悲观锁悲观的认为每一次操作都会造成更新丢失问题,在每次查询时就加上排他锁
乐观锁:乐观锁会乐观的认为每次查询都不会造成更新丢失.利用一个版本字段进行控制
查询非常多,修改非常少,使用乐观锁
修改非常多,查询非常少,使用悲观锁
第一张图的解释:
小zhang想在一个游戏网站买装备,此时游戏网站会去重定向到银行(假设是建设银行),然后银行再重定向会这个游戏网站.
但...
分类:
其他好文 时间:
2015-07-01 10:15:12
阅读次数:
91
数据库隔离级别和事务锁1. 问题提出a) 更新丢失两个事务都同时更新一行数据,一个事务对数据的更新把另一个事务对数据的更新覆盖了。这是因为系统没有执行任何的锁操作,因此并发事务并没有被隔离开来。b) 脏读一个事务读取到了另一个事务未提交的数据操作结果。这是相当危险的,因为很可能所有的操作都被回滚。c...
分类:
数据库 时间:
2015-05-25 22:20:52
阅读次数:
288
为什么需要锁(并发控制)? 在多用户环境中,在同一时间可能会有多个用户更新相同的记录,这会产生冲突。这就是著名的并发性问题。典型的冲突有:丢失更新:一个事务的更新覆盖了其它事务的更新结果,就是所谓的更新丢失。例如:用户A把值从6改为2,用户B把值从2改为6,则用户A丢失了他的更新。脏读:当一个事务....
分类:
其他好文 时间:
2015-04-16 11:53:57
阅读次数:
129
add by zhj: 本文主要谈的是乐观并发控制,虽然乐观并发控制不太适用于并发写冲突很频繁的场景下,因为这样会导致事务回滚,需要用户重试retry,但是如果不用乐观并发控制的话,貌似也没有其它什么好的办法了,悲观锁并不能解决更新丢失的问题,比如本文中的例子,我们也可以想想Git遇到这种情况时是怎...
分类:
其他好文 时间:
2015-04-09 06:10:18
阅读次数:
160