如果我们要一个客户端请求扣费100元,用户数据库有1000元。
那么执行sql
update accounts set current= current-100 where id=123456
如果我们这个sql语句执行成功了,但是http由于偶然性的断开,客户端会重试提交扣费请求,这样就会扣两次费用。
如果我们添加一个订单表detail,事务操作变成了
begin transaction
insert into detail ( id, date) values (123456,20170512);
update accounts set current= current-100 where id=123456;
commit;
这样的话,如果重复提交,第一个sql就失败了,不会重复扣费了。 其中ID由客户端生成.