mirror of
https://github.com/MariaDB/server.git
synced 2025-01-30 18:41:56 +01:00
205 lines
6.3 KiB
Text
205 lines
6.3 KiB
Text
connect con1,localhost,root,,;
|
|
SET SESSION innodb_lock_wait_timeout=1;
|
|
connection default;
|
|
SET SESSION innodb_lock_wait_timeout=1;
|
|
# Case 1: Test primary index
|
|
CREATE TABLE t1(
|
|
seat_id INT,
|
|
state INT,
|
|
PRIMARY KEY(seat_id)
|
|
) ENGINE=InnoDB;
|
|
INSERT INTO t1 VALUES(1,0), (2,0), (3,0), (4,0);
|
|
BEGIN;
|
|
SELECT * FROM t1 WHERE state = 0 LIMIT 2 LOCK IN SHARE MODE;
|
|
seat_id state
|
|
1 0
|
|
2 0
|
|
connection con1;
|
|
BEGIN;
|
|
SELECT * FROM t1 WHERE state = 0 LIMIT 2 LOCK IN SHARE MODE;
|
|
seat_id state
|
|
1 0
|
|
2 0
|
|
SELECT * FROM t1 WHERE state = 0 LIMIT 2 LOCK IN SHARE MODE SKIP LOCKED;
|
|
seat_id state
|
|
1 0
|
|
2 0
|
|
SELECT * FROM t1 WHERE state = 0 LIMIT 2 FOR UPDATE;
|
|
ERROR HY000: Lock wait timeout exceeded; try restarting transaction
|
|
SELECT * FROM t1 WHERE state = 0 LIMIT 2 FOR UPDATE NOWAIT;
|
|
ERROR HY000: Lock wait timeout exceeded; try restarting transaction
|
|
SELECT * FROM t1 WHERE state = 0 LIMIT 2 FOR UPDATE SKIP LOCKED;
|
|
seat_id state
|
|
3 0
|
|
4 0
|
|
SELECT * FROM t1 WHERE seat_id > 0 LIMIT 2 FOR UPDATE NOWAIT;
|
|
ERROR HY000: Lock wait timeout exceeded; try restarting transaction
|
|
SELECT * FROM t1 WHERE seat_id > 0 LIMIT 2 FOR UPDATE SKIP LOCKED;
|
|
seat_id state
|
|
3 0
|
|
4 0
|
|
COMMIT;
|
|
connection default;
|
|
SELECT * FROM t1 WHERE state = 0 LIMIT 2 FOR UPDATE;
|
|
seat_id state
|
|
1 0
|
|
2 0
|
|
connection con1;
|
|
SELECT * FROM t1 WHERE state = 0 LIMIT 2 LOCK IN SHARE MODE;
|
|
ERROR HY000: Lock wait timeout exceeded; try restarting transaction
|
|
SELECT * FROM t1 WHERE state = 0 LIMIT 2 LOCK IN SHARE MODE NOWAIT;
|
|
ERROR HY000: Lock wait timeout exceeded; try restarting transaction
|
|
SELECT * FROM t1 WHERE state = 0 LIMIT 2 LOCK IN SHARE MODE SKIP LOCKED;
|
|
seat_id state
|
|
3 0
|
|
4 0
|
|
SELECT * FROM t1 WHERE state = 0 LIMIT 2 FOR UPDATE;
|
|
ERROR HY000: Lock wait timeout exceeded; try restarting transaction
|
|
SELECT * FROM t1 WHERE state = 0 LIMIT 2 FOR UPDATE NOWAIT;
|
|
ERROR HY000: Lock wait timeout exceeded; try restarting transaction
|
|
SELECT * FROM t1 WHERE state = 0 LIMIT 2 FOR UPDATE SKIP LOCKED;
|
|
seat_id state
|
|
3 0
|
|
4 0
|
|
SELECT * FROM t1 WHERE seat_id > 0 LIMIT 2 FOR UPDATE NOWAIT;
|
|
ERROR HY000: Lock wait timeout exceeded; try restarting transaction
|
|
SELECT * FROM t1 WHERE seat_id > 0 LIMIT 2 FOR UPDATE SKIP LOCKED;
|
|
seat_id state
|
|
3 0
|
|
4 0
|
|
COMMIT;
|
|
connection default;
|
|
COMMIT;
|
|
DROP TABLE t1;
|
|
# Case 2: Test primary index & secondary index
|
|
CREATE TABLE t1(
|
|
seat_id INT,
|
|
row_id INT,
|
|
state INT,
|
|
PRIMARY KEY(seat_id),
|
|
KEY(row_id)
|
|
) ENGINE=InnoDB;
|
|
INSERT INTO t1 VALUES(1,1,0), (2,1,0), (3,2,0), (4,2,0);
|
|
# Test secondary key
|
|
BEGIN;
|
|
SELECT * FROM t1 WHERE state = 0 AND row_id = 1 LIMIT 1 FOR UPDATE NOWAIT;
|
|
seat_id row_id state
|
|
1 1 0
|
|
connection con1;
|
|
BEGIN;
|
|
SELECT * FROM t1 WHERE state = 0 AND row_id = 1 LIMIT 1 FOR UPDATE NOWAIT;
|
|
ERROR HY000: Lock wait timeout exceeded; try restarting transaction
|
|
SELECT * FROM t1 WHERE state = 0 AND row_id = 1 LIMIT 1 FOR UPDATE SKIP LOCKED;
|
|
seat_id row_id state
|
|
2 1 0
|
|
SELECT * FROM t1 WHERE state = 0 AND row_id > 0 LIMIT 1 FOR UPDATE NOWAIT;
|
|
ERROR HY000: Lock wait timeout exceeded; try restarting transaction
|
|
SELECT * FROM t1 WHERE state = 0 AND row_id > 0 LIMIT 1 FOR UPDATE SKIP LOCKED;
|
|
seat_id row_id state
|
|
2 1 0
|
|
SELECT * FROM t1 WHERE state = 0 FOR UPDATE NOWAIT;
|
|
ERROR HY000: Lock wait timeout exceeded; try restarting transaction
|
|
SELECT * FROM t1 WHERE state = 0 FOR UPDATE SKIP LOCKED;
|
|
seat_id row_id state
|
|
2 1 0
|
|
3 2 0
|
|
4 2 0
|
|
COMMIT;
|
|
connection default;
|
|
COMMIT;
|
|
BEGIN;
|
|
SELECT * FROM t1 WHERE seat_id = 1 FOR UPDATE NOWAIT;
|
|
seat_id row_id state
|
|
1 1 0
|
|
connection con1;
|
|
BEGIN;
|
|
SELECT * FROM t1 WHERE state = 0 AND row_id = 1 LIMIT 1 FOR UPDATE NOWAIT;
|
|
ERROR HY000: Lock wait timeout exceeded; try restarting transaction
|
|
SELECT * FROM t1 WHERE state = 0 AND row_id = 1 LIMIT 1 FOR UPDATE SKIP LOCKED;
|
|
seat_id row_id state
|
|
2 1 0
|
|
SELECT * FROM t1 WHERE state = 0 FOR UPDATE NOWAIT;
|
|
ERROR HY000: Lock wait timeout exceeded; try restarting transaction
|
|
SELECT * FROM t1 WHERE state = 0 FOR UPDATE SKIP LOCKED;
|
|
seat_id row_id state
|
|
2 1 0
|
|
3 2 0
|
|
4 2 0
|
|
COMMIT;
|
|
connection default;
|
|
COMMIT;
|
|
DROP TABLE t1;
|
|
# Case 3: Test primary index & spatial index
|
|
CREATE TABLE t1(
|
|
seat_id INT,
|
|
pos POINT NOT NULL,
|
|
state INT,
|
|
PRIMARY KEY(seat_id),
|
|
SPATIAL KEY(pos)
|
|
) ENGINE=InnoDB;
|
|
INSERT INTO t1 VALUES
|
|
(1,ST_PointFromText('POINT(1 0)'),0),
|
|
(2,ST_PointFromText('POINT(1 1)'),0),
|
|
(3,ST_PointFromText('POINT(2 0)'),0),
|
|
(4,ST_PointFromText('POINT(2 1)'),0),
|
|
(5,ST_PointFromText('POINT(3 0)'),0),
|
|
(6,ST_PointFromText('POINT(3 1)'),0);
|
|
BEGIN;
|
|
SET @g = ST_GeomFromText('POLYGON((0 0,0 2,2 2,0 2,0 0))');
|
|
SELECT seat_id, state, ST_AsText(pos) FROM t1 FORCE INDEX (pos)
|
|
WHERE state = 0 AND MBRWithin(pos, @g) FOR UPDATE NOWAIT;
|
|
seat_id state ST_AsText(pos)
|
|
2 0 POINT(1 1)
|
|
connection con1;
|
|
BEGIN;
|
|
SET @g = ST_GeomFromText('POLYGON((0 0,0 4,4 4,0 4,0 0))');
|
|
SELECT seat_id, state, ST_AsText(pos) FROM t1 FORCE INDEX (pos)
|
|
WHERE state = 0 AND MBRWithin(pos, @g) FOR UPDATE NOWAIT;
|
|
ERROR HY000: Lock wait timeout exceeded; try restarting transaction
|
|
SELECT seat_id, state, ST_AsText(pos) FROM t1
|
|
WHERE state = 0 FOR UPDATE NOWAIT;
|
|
ERROR HY000: Lock wait timeout exceeded; try restarting transaction
|
|
SELECT seat_id, state, ST_AsText(pos) FROM t1
|
|
WHERE state = 0 FOR UPDATE SKIP LOCKED;
|
|
seat_id state ST_AsText(pos)
|
|
5 0 POINT(3 0)
|
|
6 0 POINT(3 1)
|
|
COMMIT;
|
|
connection default;
|
|
COMMIT;
|
|
connection con1;
|
|
SET @g = ST_GeomFromText('POLYGON((0 0,0 3,3 3,0 3,0 0))');
|
|
SELECT seat_id, state, ST_AsText(pos) FROM t1 FORCE INDEX (pos)
|
|
WHERE state = 0 AND MBRWithin(pos, @g) FOR UPDATE;
|
|
seat_id state ST_AsText(pos)
|
|
4 0 POINT(2 1)
|
|
2 0 POINT(1 1)
|
|
connection default;
|
|
BEGIN;
|
|
SELECT seat_id, state, ST_AsText(pos) FROM t1
|
|
WHERE seat_id = 4 FOR UPDATE NOWAIT;
|
|
seat_id state ST_AsText(pos)
|
|
4 0 POINT(2 1)
|
|
connection con1;
|
|
SELECT seat_id, state, ST_AsText(pos) FROM t1 FORCE INDEX (pos)
|
|
WHERE state = 0 AND MBRWithin(pos, @g) FOR UPDATE NOWAIT;
|
|
ERROR HY000: Lock wait timeout exceeded; try restarting transaction
|
|
SELECT seat_id, state, ST_AsText(pos) FROM t1 FORCE INDEX (pos)
|
|
WHERE state = 0 AND MBRWithin(pos, @g) FOR UPDATE SKIP LOCKED;
|
|
seat_id state ST_AsText(pos)
|
|
2 0 POINT(1 1)
|
|
SELECT seat_id, state, ST_AsText(pos) FROM t1
|
|
WHERE state = 0 FOR UPDATE NOWAIT;
|
|
ERROR HY000: Lock wait timeout exceeded; try restarting transaction
|
|
SELECT seat_id, state, ST_AsText(pos) FROM t1
|
|
WHERE state = 0 FOR UPDATE SKIP LOCKED;
|
|
seat_id state ST_AsText(pos)
|
|
1 0 POINT(1 0)
|
|
2 0 POINT(1 1)
|
|
3 0 POINT(2 0)
|
|
5 0 POINT(3 0)
|
|
6 0 POINT(3 1)
|
|
connection default;
|
|
COMMIT;
|
|
DROP TABLE t1;
|
|
disconnect con1;
|