|
集_连接池.开始事务 ()
局_SQL = “select * FROM ORDERS WITH (XLOCK, ROWLOCK) where order_id='123'”
局_记录集.导入 (集_连接池.取记录集 (局_SQL, , ))
输出调试文本 (删首尾空 (局_记录集.读记录 (“order_id”).取文本 ()))
集_连接池.保存事务 ()
局_记录集.关闭 ()
本行效果:当A查询123订单时,其它人无法查询和修改,并且是行极的,查其它订单则不影响.
1. XLOCK(排他锁)
全称:Exclusive Lock
作用:获取排他锁,阻止其他任何事务读取或修改被锁定的数据
特点:
最严格的锁类型
持有锁的事务可以读写数据
其他事务不能获取任何类型的锁(包括共享锁)
2. ROWLOCK(行级锁)
作用:指定锁的粒度在行级别
特点:
只锁定查询涉及的行,而不是整个页或表
减少锁争用,提高并发性
需要配合索引使用才能生效
组合效果 WITH (XLOCK, ROWLOCK)
当这两个提示一起使用时,表示:
锁定方式:在行级别(而非页或表级别)获取排他锁
并发控制:
当前事务可以读写该行
其他事务:
不能读取(阻塞 SELECT)
不能修改(阻塞 INSERT/UPDATE/DELETE)
范围限定:只锁定查询实际访问的行,不影响表中其他行
|
|