我将表信息。和执行过程列下、方便大伙测试。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
DROP
TABLE
IF EXISTS bpm_pro_status ;
CREATE
TABLE
bpm_pro_status (
ID
bigint
(20)
NOT
NULL
COMMENT
'主键'
,
ACTINSTID
bigint
(20)
DEFAULT
NULL
COMMENT
'流程实例ID'
,
NODEID
varchar
(64)
DEFAULT
NULL
COMMENT
'节点ID'
,
NODENAME
varchar
(255)
DEFAULT
NULL
COMMENT
'节点名称'
,
STATUS
smallint
(6)
DEFAULT
NULL
COMMENT
'状态'
,
LASTUPDATETIME datetime
DEFAULT
NULL
COMMENT
'最后更新时间'
,
ACTDEFID
varchar
(64)
DEFAULT
NULL
COMMENT
'ACT流程定义ID'
,
DEFID
bigint
(20)
DEFAULT
NULL
COMMENT
'流程定义ID'
,
PRIMARY
KEY
( ID ),
KEY
IDX_BPMPROSTATUS_INSTNODEID ( ACTINSTID , NODEID ),
KEY
ACTINSTID ( ACTINSTID )
) ENGINE=InnoDB
DEFAULT
CHARSET=utf8 COMMENT=
'流程节点状态'
;
|
Session A
1
2
3
4
|
set
autocommit = 0
delete
from
bpm_pro_status;
COMMIT
;
INSERT
INTO
bpm_pro_status
VALUES
(
'1'
,
'1'
,
'UserTask1'
,
'用户任务1'
,
'-1'
,
'2015-11-12 00:00:00'
,
'test1:1:10000000490026'
,
'0'
);
update
bpm_pro_status
set
`STATUS` = 0
where
ACTINSTID =
'2'
and
NODEID =
'UserTask1'
|
Session B
1
2
|
set
autocommit = 0
INSERT
INTO
bpm_pro_status
VALUES
(
'2'
,
'2'
,
'UserTask1'
,
'用户任务1'
,
'-1'
,
'2015-11-12 00:00:00'
,
'test1:1:10000000490026'
,
'0'
);
|
SELECT @@global.tx_isolation;
REPEATABLE-READ
数据库隔离级别为REPEATABLE-READ时候,session B无法插入,说明锁表而非锁索引actinstId,nodeId
修改数据库隔离级别(切记修改隔离级别后需要重新打开会话)
SET global TRANSACTION ISOLATION LEVEL READ COMMITTED
此时在进行上面操作。则锁的是索引而不是表
mysql5.0 版本即便READ COMMITTED 也依然会锁。
目前还有一个地方锁表。还没找到原因
有张表,外键级联删除过,再添加行。则会锁表。
原文地址:http://bbs.csdn.net/topics/391858208?page=1