MySQL 5.6.14 Source Code Document
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
mrr_innodb_tests.inc
1 # MRR tests that are special for InnoDB
2 
3 --echo #
4 --echo # Bug#41029 "MRR: SELECT FOR UPDATE fails to lock gaps (InnoDB table)"
5 --echo #
6 
7 # This test verifies that a SELECT FOR UPDATE statement executed in
8 # REPEATABLE READ isolation will lock the entire read interval by verifying
9 # that a second transaction trying to update data within this interval will
10 # be blocked.
11 
12 connect (con1,localhost,root,,);
13 connect (con2,localhost,root,,);
14 
15 connection con1;
16 
17 SET AUTOCOMMIT=0;
18 
19 CREATE TABLE t1 (
20  dummy INT PRIMARY KEY,
21  a INT UNIQUE,
22  b INT
23 ) ENGINE=InnoDB;
24 
25 INSERT INTO t1 VALUES (1,1,1),(3,3,3),(5,5,5);
26 COMMIT;
27 
28 SET SESSION TRANSACTION ISOLATION LEVEL REPEATABLE READ;
29 SELECT @@tx_isolation;
30 START TRANSACTION;
31 
32 EXPLAIN SELECT * FROM t1 WHERE a > 2 FOR UPDATE;
33 
34 SELECT * FROM t1 WHERE a > 2 FOR UPDATE;
35 
36 connection con2;
37 
38 SET AUTOCOMMIT=0;
39 START TRANSACTION;
40 
41 --error ER_LOCK_WAIT_TIMEOUT
42 INSERT INTO t1 VALUES (2,2,2);
43 ROLLBACK;
44 
45 connection con1;
46 
47 ROLLBACK;
48 DROP TABLE t1;
49 
50 connection default;
51 disconnect con1;
52 disconnect con2;
53 
54 --echo #
55 --echo # Bug#54286 "Server crash at lock timeout with MRR"
56 --echo #
57 
58 connect (con1,localhost,root,,);
59 connect (con2,localhost,root,,);
60 
61 connection con1;
62 
63 SET AUTOCOMMIT=0;
64 
65 CREATE TABLE t1 (
66  dummy INT PRIMARY KEY,
67  a INT UNIQUE,
68  b INT
69 ) ENGINE=InnoDB;
70 
71 COMMIT;
72 
73 INSERT INTO t1 VALUES (1,1,1),(3,3,3),(5,5,5);
74 
75 connection con2;
76 
77 SET AUTOCOMMIT=0;
78 
79 --error ER_LOCK_WAIT_TIMEOUT
80 SELECT * FROM t1 WHERE a > 2 FOR UPDATE;
81 ROLLBACK;
82 
83 connection con1;
84 
85 ROLLBACK;
86 DROP TABLE t1;
87 COMMIT;
88 
89 connection default;
90 disconnect con1;
91 disconnect con2;
92