浅谈 SQL 中的锁
文章平均质量分 65
闭包客
一个程序员的博客 bibaoke.com
展开
-
浅谈 SQL 中的锁(五)另一种解决方案
余额问题 http://blog.csdn.net/closurer/article/details/54291241 的处理,还有一种等价方法:update balance set value = value - 1 where id = 1 and value >= 1用一个 update 语句表示如果用户余额足够,即扣减余额,数据库会对数据放置排它锁。这样既不会出现余额负数的原创 2017-01-16 16:51:57 · 462 阅读 · 0 评论 -
浅谈 SQL 中的锁(四)如何检查重复用户
上一节 http://blog.csdn.net/closurer/article/details/54342831 说了一个注册用户的事务没有互斥,导致注册用户失败的问题。也说了解决方法就是使用 serializable 隔离级别去执行事务:--开始事务begin transaction--设置串行式事务set transaction isolation le原创 2017-01-12 17:15:14 · 548 阅读 · 0 评论 -
浅谈 SQL 中的锁(三)重复用户问题
拿 Web 项目中常见的注册用户场景做例子:--测试用户表create table app_user( mobile varchar(11) primary key)--添加测试数据delete app_userinsert app_user values('13800001111')现在新注册一个手机号为 13800002222 的用户:--开始原创 2017-01-11 14:05:06 · 764 阅读 · 1 评论 -
浅谈 SQL 中的锁(二)余额问题的处理
上次模拟了 SQL 中并发执行更新余额的语句,出现余额负数的问题:http://blog.csdn.net/closurer/article/details/54288628现在说说它的解决方法。事务要正确地执行,就需要【隔离性】这个基本要素。更新余额的语句之所以会偏离期望的结果,是由于查询并没有互斥,也就是没有相互隔离:--检查用户的余额是否足够if(exist原创 2017-01-09 17:53:54 · 2497 阅读 · 0 评论 -
浅谈 SQL 中的锁(六)查看锁的基本方法
像前面的例子那样,阻塞事务的语句是必须的:--延长处理时间waitfor delay '0:00:10'这个语句代表在查询中等待 10秒,这样我们才能模拟并发的情况,如果事务很快执行完毕了,就无法重现并发的情况。我在网上看到有些例子是使用 C#、Java 等语言启动多个线程去模拟并发,而不是使用阻塞,虽然这样更接近生产环境,但并不利于简化问题。多个线程模拟并发,取决于线程数和原创 2017-01-18 14:50:15 · 1311 阅读 · 0 评论 -
浅谈 SQL 中的锁(一)余额问题
这两天看到数据库的数据一致性和锁定的问题:http://bbs.csdn.net/topics/392072953http://bbs.csdn.net/topics/392073296写一个帖子专门说说这个。举一个用户余额的例子,余额可以是现金、虚拟币、积分等,可以看作对数据准确度要求高的数据,一旦出错,就会造成客户或公司的直接损失。在SQLServer建立原创 2017-01-09 14:25:54 · 2148 阅读 · 0 评论 -
浅谈 SQL 中的锁(七)如何生成自定义的自增 ID
在 SQL 表设计中,自增 ID 的使用很广泛。因为有些数据的属性并不具有唯一性,所以要给它加上一个生成的主键。生成主键最方便的方式,就是采用 SQL 产品提供的自增 ID 功能。可能自增 ID 的使用太过方便了,现在大有泛滥的趋势,甚至有资深的工程师说:所有的表都应该有一个自增的主键。不过 SQL 产品的自增 ID 功能,一般都只使用简单的自增整型,就是第一行记录的 ID 是 1,第二行记录的 ...原创 2018-02-23 14:13:37 · 1085 阅读 · 0 评论