1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119
|
set global innodb_lock_wait_timeout=42;
connect a,localhost,root,,;
connect b,localhost,root,,;
connection a;
select @@innodb_lock_wait_timeout;
@@innodb_lock_wait_timeout
42
set innodb_lock_wait_timeout=1;
select @@innodb_lock_wait_timeout;
@@innodb_lock_wait_timeout
1
connection b;
select @@innodb_lock_wait_timeout;
@@innodb_lock_wait_timeout
42
set global innodb_lock_wait_timeout=347;
select @@innodb_lock_wait_timeout;
@@innodb_lock_wait_timeout
42
set innodb_lock_wait_timeout=10;
select @@innodb_lock_wait_timeout;
@@innodb_lock_wait_timeout
10
connect c,localhost,root,,;
connection c;
select @@innodb_lock_wait_timeout;
@@innodb_lock_wait_timeout
347
disconnect c;
connection a;
SET @connection_b_id = <connection_b_id>;
create table t1(a int primary key)engine=innodb;
begin;
insert into t1 values(1),(2),(3);
connection b;
select * from t1 for update;
connection a;
commit;
connection b;
a
1
2
3
connection a;
begin;
insert into t1 values(4);
connection b;
set innodb_lock_wait_timeout=3;
select * from t1 for update;
connection a;
commit;
connection b;
ERROR HY000: Lock wait timeout exceeded; try restarting transaction
disconnect b;
connection a;
disconnect a;
connection default;
drop table t1;
set global innodb_lock_wait_timeout=<initial_timeout>;
#
# MDEV-11379 - AliSQL: [Feature] Issue#8: SELECT FOR UPDATE WAIT
#
CREATE TABLE t1 (c1 INT, c2 INT) ENGINE=InnoDB;
INSERT INTO t1 (c1,c2) values (1,1),(2,2),(3,3),(4,4);
CREATE VIEW v1 AS SELECT * FROM t1 WHERE c1=4 FOR UPDATE NOWAIT;
ERROR HY000: View's SELECT contains a '[NO]WAIT' clause
CREATE VIEW v1 AS SELECT * FROM t1 WHERE c1=4 FOR UPDATE WAIT 0;
ERROR HY000: View's SELECT contains a '[NO]WAIT' clause
CREATE PROCEDURE p1() SELECT * FROM t1 WHERE c1=4 FOR UPDATE NOWAIT;
ERROR 0A000: [NO]WAIT is not allowed in stored procedures
CREATE PROCEDURE p1() SELECT * FROM t1 WHERE c1=4 FOR UPDATE WAIT 0;
ERROR 0A000: [NO]WAIT is not allowed in stored procedures
connect con1,localhost,root,,;
LOCK TABLE t1 WRITE;
connect con2,localhost,root,,;
SELECT * FROM t1 WHERE c1=4 FOR UPDATE NOWAIT;
ERROR HY000: Lock wait timeout exceeded; try restarting transaction
SELECT * FROM t1 WHERE c1=4 FOR UPDATE WAIT 0;
ERROR HY000: Lock wait timeout exceeded; try restarting transaction
PREPARE stmt FROM 'SELECT * FROM t1 WHERE c1=4 FOR UPDATE NOWAIT';
EXECUTE stmt;
ERROR HY000: Lock wait timeout exceeded; try restarting transaction
DEALLOCATE PREPARE stmt;
PREPARE stmt FROM 'SELECT * FROM t1 WHERE c1=4 FOR UPDATE WAIT 0';
EXECUTE stmt;
ERROR HY000: Lock wait timeout exceeded; try restarting transaction
DEALLOCATE PREPARE stmt;
connection con1;
INSERT INTO t1 VALUES(5,5);
UNLOCK TABLES;
set AUTOCOMMIT=0;
SELECT * FROM t1 WHERE c1=4 FOR UPDATE;
connection con2;
set AUTOCOMMIT=0;
SET INNODB_LOCK_WAIT_TIMEOUT=1;
SELECT * FROM t1 WHERE c1=4 FOR UPDATE;
ERROR HY000: Lock wait timeout exceeded; try restarting transaction
SELECT * FROM t1 WHERE c1=4 FOR UPDATE NOWAIT;
ERROR HY000: Lock wait timeout exceeded; try restarting transaction
SELECT * FROM t1 WHERE c1=4 FOR UPDATE WAIT 0;
ERROR HY000: Lock wait timeout exceeded; try restarting transaction
connection con1;
UPDATE t1 SET c2=5 WHERE c1=4;
COMMIT;
set AUTOCOMMIT=0;
SELECT * FROM t1 WHERE c1=4 FOR UPDATE;
c1 c2
4 5
connection con2;
set AUTOCOMMIT=0;
SET INNODB_LOCK_WAIT_TIMEOUT=1;
SELECT * FROM t1 WHERE c1=4 FOR UPDATE WAIT 10;
connection con1;
COMMIT;
connection con2;
disconnect con1;
disconnect con2;
connection default;
DROP TABLE t1;
|