数据库锁
来源:互联网 发布:手机尤克里里调音软件 编辑:程序博客网 时间:2024/05/16 05:17
今天财务在后台手工充值的时候, 由于系统反应慢, 点了两次, 结果是流水记了两笔, 金额只增加了一笔
今天用开两个SQLyog客户端来还原财务充值发生的情况, 以下SQL在多线程下执行, 将会出现写覆盖。
如果只执行select amount from t_test where id=91是不加任何锁的,因此在update提加之前, 这条语句也能执行。
BEGIN;
SELECT @a:=amount FROM t_test WHERE id = 91; (两条线程同时执行到了这儿)
-- SELECT @a:=amount FROM t_test WHERE id = 91 for update; (两条线程同时卡在这儿, 这时状况发生了, 估计是有另外一个比较大的事务里面锁住了这行记录)
SET @a=@a+10;
SELECT @n:=@a;
UPDATE t_test SET amount = @a WHERE id = 91;
SELECT @a:=amount FROM t_test WHERE id = 91;
COMMIT;
ROLLBACK;
解决方案, 用乐观锁, 如果发现amount已经更改, 则提示修改不成功
update t_test set amount = amount + 10 where id =91 and amount = @originalAmount.
0 0
- 数据库锁
- 数据库 锁
- 数据库锁
- 数据库锁
- 数据库锁
- 数据库锁
- 数据库锁
- 数据库锁
- 数据库锁
- 数据库锁
- 数据库锁
- 数据库锁
- 数据库锁
- 数据库锁
- 数据库锁
- 数据库锁
- 数据库锁
- 数据库锁
- WinForm中DataGridView控件绑定列顺序
- 为什么web应用在tomcat启动时报java.lang.ClassCastException异常?
- 模板文件是否有大小限制?
- 删除项目中的.svn或者cvs文件夹
- 7
- 数据库锁
- 黑马程序员——java基础(函数与数组)
- Android中轴旋转特效实现,制作别样的图片浏览器
- ListView无法获取焦点之问题解决
- 杭电1171 Big Event in HDU
- Tiny框架增加RESTful访问支持
- 第一章 算法概述
- Tiny即将推出DSL风格数据库编程框架
- 排序算法总结