InnoDB是一个支持行锁的存储引擎,它有三种行锁的算法: Record Lock:行锁,单个行记录上的锁. Gap Lock:间隙锁,锁定一个范围,但不包括记录本身.GAP锁的目的,是为了防止幻读.防止间隙内有新数据插入.防止已存在的数据更新为间隙内的数据. Next-Key Lock:1+2,锁定一个范围,并且锁定记录本身.对于行的查询,都是采用该方法,主要目的是解决幻读的问题.InnoDB默认加锁方式是next-key 锁. 这三种锁都是排它锁(X锁). 要详细了解间隙锁可以参考这篇文章:
原文:sqlserver 出现sql被锁时,查看加锁和被锁的sql DECLARE @spid INT DECLARE @blk INT DECLARE @count INT DECLARE @index INT DECLARE @lock TINYINT SET @lock=0 CREATE TABLE #temp_who_lock ( id INT IDENTITY(1, 1), spid INT, blk INT ) --if @@e
查看等待锁的查询和进程: The following query may be helpful to see what processes are blocking SQL statements (these only find row-level locks, not object-level locks). SELECT blocked_locks.pid AS blocked_pid, blocked_activity.usename AS blocked_user, blocking_l
declare --类型定义 cursor c_cur is --查询锁表进程 SELECT object_name, machine, s.sid, s.serial# FROM gv$locked_object l, dba_objects o, gv$session s WHERE l.object_id = o.object_id AND l.session_id = s.sid; c_row c_cur%rowtype;begin open c_cur; loop fetch c_cu
SELECT DECODE(request, 0, 'Holder: ', 'Waiter: ') || sid sess, id1, id2, lmode, request, type FROM V$LOCK WHERE (id1, id2, type) IN (SELECT id1, id2, type FROM V$LOCK WHERE request > 0) ORDER BY id1, request; sele
SELECT l.session_id sid, s.serial#, l.locked_mode, l.oracle_username, s.user#, l.os_user_name,s.machine, s.terminal,a.sql_text, a.action FROM v$sqlarea a,v$session s, v$locked_object l WHERE l.session_id = s.sid AND s.prev_sql_addr = a.address ORDER