Loading mysql-test/suite/row_lock/include/row_lock.inc 0 → 100644 +83 −0 Original line number Diff line number Diff line --disable_warnings DROP TABLE IF EXISTS t1, t2; --enable_warnings SET autocommit=0; # Create additional connections used through test CONNECT (root1, localhost, root,,); SET autocommit=0; --echo connection default; CONNECTION default; eval CREATE TABLE t1 (k INT NOT NULL PRIMARY KEY, i INT, j INT, l INT) ENGINE=$engine; INSERT INTO t1 VALUES (1,123,1,123); INSERT INTO t1 VALUES (2,124,2,124); INSERT INTO t1 VALUES (3,125,3,125); INSERT INTO t1 VALUES (4,126,4,126); eval $indext1; eval CREATE TABLE t2 (k INT NOT NULL PRIMARY KEY, i INT, j INT, l INT) ENGINE=$engine; INSERT INTO t2 VALUES (1,123,1,123); INSERT INTO t2 VALUES (2,124,2,124); INSERT INTO t2 VALUES (3,125,3,125); INSERT INTO t2 VALUES (4,126,4,126); eval $indext2; COMMIT; SELECT @@global.tx_isolation; # Both transaction are able to update the tables eval EXPLAIN $select; eval $select; --echo connection root1; CONNECTION root1; UPDATE t1,t2 SET t1.i=225,t2.i=225 WHERE t1.i=125 AND t2.i=t1.i; SELECT * FROM t1 ORDER BY t1.k; SELECT * FROM t2 ORDER BY t2.k; --echo connection default; CONNECTION default; UPDATE t1,t2 SET t1.i=223,t2.i=223 WHERE t1.i=123 AND t2.i=t1.i; SELECT * FROM t1 ORDER BY t1.k; SELECT * FROM t2 ORDER BY t2.k; --echo connection root1; CONNECTION root1; UPDATE t1,t2 SET t1.i=226,t2.i=226 WHERE t1.i=126 AND t2.i=t1.i; SELECT * FROM t1 ORDER BY t1.k; SELECT * FROM t2 ORDER BY t2.k; --echo connection default; CONNECTION default; UPDATE t1,t2 SET t1.i=224,t2.i=224 WHERE t1.i=124 AND t2.i=t1.i; SELECT * FROM t1 ORDER BY t1.k; SELECT * FROM t2 ORDER BY t2.k; --echo connection root1; CONNECTION root1; DELETE FROM t1 WHERE t1.i=226; SELECT * FROM t1 ORDER BY t1.k; SELECT * FROM t2 ORDER BY t2.k; --echo connection default; CONNECTION default; DELETE FROM t1 WHERE t1.i=224; SELECT * FROM t1 ORDER BY t1.k; SELECT * FROM t2 ORDER BY t2.k; COMMIT; --echo connection root1; CONNECTION root1; ROLLBACK; --echo connection default; CONNECTION default; SELECT * FROM t1 ORDER BY t1.k; SELECT * FROM t2 ORDER BY t2.k; --echo connection root1; CONNECTION root1; SELECT * FROM t1 ORDER BY t1.k; SELECT * FROM t2 ORDER BY t2.k; DISCONNECT root1; --echo connection default; CONNECTION default; DROP TABLE t1, t2; mysql-test/suite/row_lock/include/row_lock_big_tab.inc 0 → 100644 +94 −0 Original line number Diff line number Diff line --disable_warnings DROP TABLE IF EXISTS t1, t2; DROP VIEW IF EXISTS v1; --enable_warnings SET autocommit=0; # Create additional connections used through test CONNECT (root1, localhost, root,,); SET autocommit=0; --echo connection default; CONNECTION default; eval CREATE TABLE t1 (k INT NOT NULL PRIMARY KEY, i INT, j INT, l INT) ENGINE=$engine; eval $indext1; eval CREATE TABLE t2 (k INT NOT NULL PRIMARY KEY, i INT, j INT, l INT) ENGINE=$engine; eval $indext2; DELIMITER |; CREATE PROCEDURE fill_t1 (IN upb int) BEGIN DECLARE cnt int DEFAULT 0; WHILE cnt < upb DO INSERT INTO t1 VALUES (cnt, cnt+100, cnt, cnt+100); SET cnt= cnt+1; END WHILE; END; | CREATE FUNCTION half_t1() RETURNS int BEGIN DECLARE res int DEFAULT 0; SELECT count(*)/2 INTO res FROM t1; RETURN res; END; | CREATE PROCEDURE fill_t2 (IN upb int) BEGIN DECLARE cnt int DEFAULT 0; WHILE cnt < upb DO INSERT INTO t2 VALUES (cnt, cnt+100, cnt, cnt+100); SET cnt= cnt+1; END WHILE; END; | CREATE FUNCTION half_t2() RETURNS int BEGIN DECLARE res int DEFAULT 0; SELECT count(*)/2 INTO res FROM t2; RETURN res; END; | DELIMITER ;| CALL fill_t1 (10); CALL fill_t2 (10); COMMIT; SELECT @@global.tx_isolation; # With the two separate selects (without join) the differs from # that select with join. # Both transaction are able to update the tables eval EXPLAIN $select; eval $select; --echo connection root1; CONNECTION root1; SELECT k from t1 WHERE k < half_t1(); SELECT k from t1 WHERE k >= half_t1(); UPDATE t1,t2 SET t1.i=1111,t2.i=2222 WHERE t1.k < half_t1() AND t2.i=t1.i; SELECT * FROM t1 ORDER BY t1.k; SELECT * FROM t2 ORDER BY t2.k; --echo connection default; CONNECTION default; UPDATE t1,t2 SET t1.i=3333,t2.i=4444 WHERE t1.k >= half_t1() AND t2.i=t1.i; SELECT * FROM t1 ORDER BY t1.k; SELECT * FROM t2 ORDER BY t2.k; COMMIT; --echo connection root1; CONNECTION root1; ROLLBACK; --echo connection default; CONNECTION default; SELECT * FROM t1 ORDER BY t1.k; SELECT * FROM t2 ORDER BY t2.k; --echo connection root1; CONNECTION root1; SELECT * FROM t1 ORDER BY t1.k; SELECT * FROM t2 ORDER BY t2.k; DISCONNECT root1; --echo connection default; CONNECTION default; DROP VIEW IF EXISTS v1; DROP TABLE t1, t2; #DROP VIEW v1; mysql-test/suite/row_lock/include/row_lock_big_tab_1.inc 0 → 100644 +93 −0 Original line number Diff line number Diff line --disable_warnings DROP TABLE IF EXISTS t1, t2; DROP VIEW IF EXISTS v1; --enable_warnings SET autocommit=0; # Create additional connections used through test CONNECT (root1, localhost, root,,); SET autocommit=0; --echo connection default; CONNECTION default; eval CREATE TABLE t1 (k INT NOT NULL PRIMARY KEY, i INT, j INT, l INT) ENGINE=$engine; eval $indext1; eval CREATE TABLE t2 (k INT NOT NULL PRIMARY KEY, i INT, j INT, l INT) ENGINE=$engine; eval $indext2; DELIMITER |; CREATE PROCEDURE fill_t1 (IN upb int) BEGIN DECLARE cnt int DEFAULT 0; WHILE cnt < upb DO INSERT INTO t1 VALUES (cnt, cnt+100, cnt, cnt+100); SET cnt= cnt+1; END WHILE; END; | CREATE FUNCTION half_t1() RETURNS int BEGIN DECLARE res int DEFAULT 0; SELECT MOD(k,2) INTO res FROM t1; RETURN res; END; | CREATE PROCEDURE fill_t2 (IN upb int) BEGIN DECLARE cnt int DEFAULT 0; WHILE cnt < upb DO INSERT INTO t2 VALUES (cnt, cnt+100, cnt, cnt+100); SET cnt= cnt+1; END WHILE; END; | CREATE FUNCTION half_t2() RETURNS int BEGIN DECLARE res int DEFAULT 0; SELECT MOD(k,2) INTO res FROM t2; RETURN res; END; | DELIMITER ;| eval CALL fill_t1 ($nbrows); eval CALL fill_t2 ($nbrows); COMMIT; SELECT @@global.tx_isolation; # With the two separate selects (without join) the differs from # that select with join. # Both transaction are able to update the tables eval EXPLAIN $select; eval $select; --echo connection root1; CONNECTION root1; SELECT t1.i,t2.i FROM t1,t2 WHERE t1.k % 2= 1 AND t1.k = t2.k LOCK IN SHARE MODE; UPDATE t1,t2 SET t1.i=1111,t2.i=2222 WHERE t1.k % 2 = 1 AND t1.k = t2.k; SELECT * FROM t1 WHERE k < 20 ORDER BY t1.k; SELECT * FROM t2 WHERE k < 20 ORDER BY t2.k; --echo connection default; CONNECTION default; UPDATE t1,t2 SET t1.i=3333,t2.i=4444 WHERE t1.k % 2 = 0 AND t1.k = t2.k; SELECT * FROM t1 WHERE k < 20 ORDER BY t1.k; SELECT * FROM t2 WHERE k < 20 ORDER BY t2.k; COMMIT; --echo connection root1; CONNECTION root1; ROLLBACK; --echo connection default; CONNECTION default; SELECT * FROM t1 WHERE k < 40 ORDER BY t1.k; SELECT * FROM t2 WHERE k < 40 ORDER BY t2.k; --echo connection root1; CONNECTION root1; SELECT * FROM t1 WHERE k < 40 ORDER BY t1.k; SELECT * FROM t2 WHERE k < 40 ORDER BY t2.k; DISCONNECT root1; --echo connection default; CONNECTION default; DROP TABLE t1, t2; mysql-test/suite/row_lock/include/row_lock_big_tab_2.inc 0 → 100644 +93 −0 Original line number Diff line number Diff line --disable_warnings DROP TABLE IF EXISTS t1, t2; DROP VIEW IF EXISTS v1; --enable_warnings SET autocommit=0; # Create additional connections used through test CONNECT (root1, localhost, root,,); SET autocommit=0; --echo connection default; CONNECTION default; eval CREATE TABLE t1 (k INT NOT NULL PRIMARY KEY, i INT, j INT, l INT) ENGINE=$engine; eval $indext1; eval CREATE TABLE t2 (k INT NOT NULL PRIMARY KEY, i INT, j INT, l INT) ENGINE=$engine; eval $indext2; DELIMITER |; CREATE PROCEDURE fill_t1 (IN upb int) BEGIN DECLARE cnt int DEFAULT 0; WHILE cnt < upb DO INSERT INTO t1 VALUES (cnt, cnt+100, cnt, cnt+100); SET cnt= cnt+1; END WHILE; END; | CREATE FUNCTION half_t1() RETURNS int BEGIN DECLARE res int DEFAULT 0; SELECT MOD(k,2) INTO res FROM t1; RETURN res; END; | CREATE PROCEDURE fill_t2 (IN upb int) BEGIN DECLARE cnt int DEFAULT 0; WHILE cnt < upb DO INSERT INTO t2 VALUES (cnt, cnt+100, cnt, cnt+100); SET cnt= cnt+1; END WHILE; END; | CREATE FUNCTION half_t2() RETURNS int BEGIN DECLARE res int DEFAULT 0; SELECT MOD(k,2) INTO res FROM t2; RETURN res; END; | DELIMITER ;| eval CALL fill_t1 ($nbrows); eval CALL fill_t2 ($nbrows); COMMIT; SELECT @@global.tx_isolation; # With the two separate selects (without join) the differs from # that select with join. # Both transaction are able to update the tables eval EXPLAIN $select; eval $select; --echo connection root1; CONNECTION root1; #SELECT t1.i,t2.i FROM t1,t2 WHERE t1.k % 2= 1 AND t1.k = t2.k FOR UPDATE; DELETE FROM t1 WHERE t1.k % 2 = 1; SELECT * FROM t1 WHERE k < 20 ORDER BY t1.k; SELECT * FROM t2 WHERE k < 20 ORDER BY t2.k; --echo connection default; CONNECTION default; UPDATE t1,t2 SET t1.i=3333,t2.i=4444 WHERE t1.k % 2 = 0 AND t1.k = t2.k; SELECT * FROM t1 WHERE k < 20 ORDER BY t1.k; SELECT * FROM t2 WHERE k < 20 ORDER BY t2.k; COMMIT; --echo connection root1; CONNECTION root1; ROLLBACK; --echo connection default; CONNECTION default; SELECT * FROM t1 WHERE k < 40 ORDER BY t1.k; SELECT * FROM t2 WHERE k < 40 ORDER BY t2.k; --echo connection root1; CONNECTION root1; SELECT * FROM t1 WHERE k < 40 ORDER BY t1.k; SELECT * FROM t2 WHERE k < 40 ORDER BY t2.k; DISCONNECT root1; --echo connection default; CONNECTION default; DROP TABLE t1, t2; mysql-test/suite/row_lock/include/row_lock_trig.inc 0 → 100644 +96 −0 Original line number Diff line number Diff line --disable_warnings DROP TABLE IF EXISTS t1, t2; DROP VIEW IF EXISTS v1; --enable_warnings SET autocommit=0; # Create additional connections used through test CONNECT (root1, localhost, root,,); SET autocommit=0; --echo connection default; CONNECTION default; eval CREATE TABLE t1 (k INT NOT NULL PRIMARY KEY, i INT, j INT, l INT) ENGINE=$engine; INSERT INTO t1 VALUES (1,123,1,123); INSERT INTO t1 VALUES (2,124,2,124); INSERT INTO t1 VALUES (3,125,3,125); INSERT INTO t1 VALUES (4,126,4,126); eval $indext1; eval CREATE TABLE t2 (k INT NOT NULL PRIMARY KEY, i INT, j INT, l INT) ENGINE=$engine; INSERT INTO t2 VALUES (1,123,1,123); INSERT INTO t2 VALUES (2,124,2,124); INSERT INTO t2 VALUES (3,125,3,125); INSERT INTO t2 VALUES (4,126,4,126); eval $indext2; DELIMITER |; CREATE TRIGGER trig_t2 AFTER UPDATE ON t2 FOR EACH ROW BEGIN UPDATE t1 SET l = NEW.i WHERE i = OLD.i; END; | DELIMITER ;| COMMIT; SELECT @@global.tx_isolation; # With the two separate selects (without join) the differs from # that select with join. # Both transaction are able to update the tables eval EXPLAIN $select; eval $select; --echo connection root1; CONNECTION root1; UPDATE t2 SET t2.i=225 WHERE t2.i=125; SELECT * FROM t1 ORDER BY t1.k; SELECT * FROM t2 ORDER BY t2.k; --echo connection default; CONNECTION default; UPDATE t2 SET t2.i=223 WHERE t2.i=123; SELECT * FROM t1 ORDER BY t1.k; SELECT * FROM t2 ORDER BY t2.k; --echo connection root1; CONNECTION root1; UPDATE t2 SET t2.i=226 WHERE t2.i=126; SELECT * FROM t1 ORDER BY t1.k; SELECT * FROM t2 ORDER BY t2.k; --echo connection default; CONNECTION default; UPDATE t2 SET t2.i=224 WHERE t2.i=124; SELECT * FROM t1 ORDER BY t1.k; SELECT * FROM t2 ORDER BY t2.k; --echo connection root1; CONNECTION root1; DELETE FROM t1 WHERE t1.i=226; SELECT * FROM t1 ORDER BY t1.k; SELECT * FROM t2 ORDER BY t2.k; --echo connection default; CONNECTION default; DELETE FROM t1 WHERE t1.i=224; SELECT * FROM t1 ORDER BY t1.k; SELECT * FROM t2 ORDER BY t2.k; COMMIT; --echo connection root1; CONNECTION root1; ROLLBACK; --echo connection default; CONNECTION default; SELECT * FROM t1 ORDER BY t1.k; SELECT * FROM t2 ORDER BY t2.k; --echo connection root1; CONNECTION root1; SELECT * FROM t1 ORDER BY t1.k; SELECT * FROM t2 ORDER BY t2.k; DISCONNECT root1; --echo connection default; CONNECTION default; DROP TABLE t1, t2; #DROP VIEW v1; Loading
mysql-test/suite/row_lock/include/row_lock.inc 0 → 100644 +83 −0 Original line number Diff line number Diff line --disable_warnings DROP TABLE IF EXISTS t1, t2; --enable_warnings SET autocommit=0; # Create additional connections used through test CONNECT (root1, localhost, root,,); SET autocommit=0; --echo connection default; CONNECTION default; eval CREATE TABLE t1 (k INT NOT NULL PRIMARY KEY, i INT, j INT, l INT) ENGINE=$engine; INSERT INTO t1 VALUES (1,123,1,123); INSERT INTO t1 VALUES (2,124,2,124); INSERT INTO t1 VALUES (3,125,3,125); INSERT INTO t1 VALUES (4,126,4,126); eval $indext1; eval CREATE TABLE t2 (k INT NOT NULL PRIMARY KEY, i INT, j INT, l INT) ENGINE=$engine; INSERT INTO t2 VALUES (1,123,1,123); INSERT INTO t2 VALUES (2,124,2,124); INSERT INTO t2 VALUES (3,125,3,125); INSERT INTO t2 VALUES (4,126,4,126); eval $indext2; COMMIT; SELECT @@global.tx_isolation; # Both transaction are able to update the tables eval EXPLAIN $select; eval $select; --echo connection root1; CONNECTION root1; UPDATE t1,t2 SET t1.i=225,t2.i=225 WHERE t1.i=125 AND t2.i=t1.i; SELECT * FROM t1 ORDER BY t1.k; SELECT * FROM t2 ORDER BY t2.k; --echo connection default; CONNECTION default; UPDATE t1,t2 SET t1.i=223,t2.i=223 WHERE t1.i=123 AND t2.i=t1.i; SELECT * FROM t1 ORDER BY t1.k; SELECT * FROM t2 ORDER BY t2.k; --echo connection root1; CONNECTION root1; UPDATE t1,t2 SET t1.i=226,t2.i=226 WHERE t1.i=126 AND t2.i=t1.i; SELECT * FROM t1 ORDER BY t1.k; SELECT * FROM t2 ORDER BY t2.k; --echo connection default; CONNECTION default; UPDATE t1,t2 SET t1.i=224,t2.i=224 WHERE t1.i=124 AND t2.i=t1.i; SELECT * FROM t1 ORDER BY t1.k; SELECT * FROM t2 ORDER BY t2.k; --echo connection root1; CONNECTION root1; DELETE FROM t1 WHERE t1.i=226; SELECT * FROM t1 ORDER BY t1.k; SELECT * FROM t2 ORDER BY t2.k; --echo connection default; CONNECTION default; DELETE FROM t1 WHERE t1.i=224; SELECT * FROM t1 ORDER BY t1.k; SELECT * FROM t2 ORDER BY t2.k; COMMIT; --echo connection root1; CONNECTION root1; ROLLBACK; --echo connection default; CONNECTION default; SELECT * FROM t1 ORDER BY t1.k; SELECT * FROM t2 ORDER BY t2.k; --echo connection root1; CONNECTION root1; SELECT * FROM t1 ORDER BY t1.k; SELECT * FROM t2 ORDER BY t2.k; DISCONNECT root1; --echo connection default; CONNECTION default; DROP TABLE t1, t2;
mysql-test/suite/row_lock/include/row_lock_big_tab.inc 0 → 100644 +94 −0 Original line number Diff line number Diff line --disable_warnings DROP TABLE IF EXISTS t1, t2; DROP VIEW IF EXISTS v1; --enable_warnings SET autocommit=0; # Create additional connections used through test CONNECT (root1, localhost, root,,); SET autocommit=0; --echo connection default; CONNECTION default; eval CREATE TABLE t1 (k INT NOT NULL PRIMARY KEY, i INT, j INT, l INT) ENGINE=$engine; eval $indext1; eval CREATE TABLE t2 (k INT NOT NULL PRIMARY KEY, i INT, j INT, l INT) ENGINE=$engine; eval $indext2; DELIMITER |; CREATE PROCEDURE fill_t1 (IN upb int) BEGIN DECLARE cnt int DEFAULT 0; WHILE cnt < upb DO INSERT INTO t1 VALUES (cnt, cnt+100, cnt, cnt+100); SET cnt= cnt+1; END WHILE; END; | CREATE FUNCTION half_t1() RETURNS int BEGIN DECLARE res int DEFAULT 0; SELECT count(*)/2 INTO res FROM t1; RETURN res; END; | CREATE PROCEDURE fill_t2 (IN upb int) BEGIN DECLARE cnt int DEFAULT 0; WHILE cnt < upb DO INSERT INTO t2 VALUES (cnt, cnt+100, cnt, cnt+100); SET cnt= cnt+1; END WHILE; END; | CREATE FUNCTION half_t2() RETURNS int BEGIN DECLARE res int DEFAULT 0; SELECT count(*)/2 INTO res FROM t2; RETURN res; END; | DELIMITER ;| CALL fill_t1 (10); CALL fill_t2 (10); COMMIT; SELECT @@global.tx_isolation; # With the two separate selects (without join) the differs from # that select with join. # Both transaction are able to update the tables eval EXPLAIN $select; eval $select; --echo connection root1; CONNECTION root1; SELECT k from t1 WHERE k < half_t1(); SELECT k from t1 WHERE k >= half_t1(); UPDATE t1,t2 SET t1.i=1111,t2.i=2222 WHERE t1.k < half_t1() AND t2.i=t1.i; SELECT * FROM t1 ORDER BY t1.k; SELECT * FROM t2 ORDER BY t2.k; --echo connection default; CONNECTION default; UPDATE t1,t2 SET t1.i=3333,t2.i=4444 WHERE t1.k >= half_t1() AND t2.i=t1.i; SELECT * FROM t1 ORDER BY t1.k; SELECT * FROM t2 ORDER BY t2.k; COMMIT; --echo connection root1; CONNECTION root1; ROLLBACK; --echo connection default; CONNECTION default; SELECT * FROM t1 ORDER BY t1.k; SELECT * FROM t2 ORDER BY t2.k; --echo connection root1; CONNECTION root1; SELECT * FROM t1 ORDER BY t1.k; SELECT * FROM t2 ORDER BY t2.k; DISCONNECT root1; --echo connection default; CONNECTION default; DROP VIEW IF EXISTS v1; DROP TABLE t1, t2; #DROP VIEW v1;
mysql-test/suite/row_lock/include/row_lock_big_tab_1.inc 0 → 100644 +93 −0 Original line number Diff line number Diff line --disable_warnings DROP TABLE IF EXISTS t1, t2; DROP VIEW IF EXISTS v1; --enable_warnings SET autocommit=0; # Create additional connections used through test CONNECT (root1, localhost, root,,); SET autocommit=0; --echo connection default; CONNECTION default; eval CREATE TABLE t1 (k INT NOT NULL PRIMARY KEY, i INT, j INT, l INT) ENGINE=$engine; eval $indext1; eval CREATE TABLE t2 (k INT NOT NULL PRIMARY KEY, i INT, j INT, l INT) ENGINE=$engine; eval $indext2; DELIMITER |; CREATE PROCEDURE fill_t1 (IN upb int) BEGIN DECLARE cnt int DEFAULT 0; WHILE cnt < upb DO INSERT INTO t1 VALUES (cnt, cnt+100, cnt, cnt+100); SET cnt= cnt+1; END WHILE; END; | CREATE FUNCTION half_t1() RETURNS int BEGIN DECLARE res int DEFAULT 0; SELECT MOD(k,2) INTO res FROM t1; RETURN res; END; | CREATE PROCEDURE fill_t2 (IN upb int) BEGIN DECLARE cnt int DEFAULT 0; WHILE cnt < upb DO INSERT INTO t2 VALUES (cnt, cnt+100, cnt, cnt+100); SET cnt= cnt+1; END WHILE; END; | CREATE FUNCTION half_t2() RETURNS int BEGIN DECLARE res int DEFAULT 0; SELECT MOD(k,2) INTO res FROM t2; RETURN res; END; | DELIMITER ;| eval CALL fill_t1 ($nbrows); eval CALL fill_t2 ($nbrows); COMMIT; SELECT @@global.tx_isolation; # With the two separate selects (without join) the differs from # that select with join. # Both transaction are able to update the tables eval EXPLAIN $select; eval $select; --echo connection root1; CONNECTION root1; SELECT t1.i,t2.i FROM t1,t2 WHERE t1.k % 2= 1 AND t1.k = t2.k LOCK IN SHARE MODE; UPDATE t1,t2 SET t1.i=1111,t2.i=2222 WHERE t1.k % 2 = 1 AND t1.k = t2.k; SELECT * FROM t1 WHERE k < 20 ORDER BY t1.k; SELECT * FROM t2 WHERE k < 20 ORDER BY t2.k; --echo connection default; CONNECTION default; UPDATE t1,t2 SET t1.i=3333,t2.i=4444 WHERE t1.k % 2 = 0 AND t1.k = t2.k; SELECT * FROM t1 WHERE k < 20 ORDER BY t1.k; SELECT * FROM t2 WHERE k < 20 ORDER BY t2.k; COMMIT; --echo connection root1; CONNECTION root1; ROLLBACK; --echo connection default; CONNECTION default; SELECT * FROM t1 WHERE k < 40 ORDER BY t1.k; SELECT * FROM t2 WHERE k < 40 ORDER BY t2.k; --echo connection root1; CONNECTION root1; SELECT * FROM t1 WHERE k < 40 ORDER BY t1.k; SELECT * FROM t2 WHERE k < 40 ORDER BY t2.k; DISCONNECT root1; --echo connection default; CONNECTION default; DROP TABLE t1, t2;
mysql-test/suite/row_lock/include/row_lock_big_tab_2.inc 0 → 100644 +93 −0 Original line number Diff line number Diff line --disable_warnings DROP TABLE IF EXISTS t1, t2; DROP VIEW IF EXISTS v1; --enable_warnings SET autocommit=0; # Create additional connections used through test CONNECT (root1, localhost, root,,); SET autocommit=0; --echo connection default; CONNECTION default; eval CREATE TABLE t1 (k INT NOT NULL PRIMARY KEY, i INT, j INT, l INT) ENGINE=$engine; eval $indext1; eval CREATE TABLE t2 (k INT NOT NULL PRIMARY KEY, i INT, j INT, l INT) ENGINE=$engine; eval $indext2; DELIMITER |; CREATE PROCEDURE fill_t1 (IN upb int) BEGIN DECLARE cnt int DEFAULT 0; WHILE cnt < upb DO INSERT INTO t1 VALUES (cnt, cnt+100, cnt, cnt+100); SET cnt= cnt+1; END WHILE; END; | CREATE FUNCTION half_t1() RETURNS int BEGIN DECLARE res int DEFAULT 0; SELECT MOD(k,2) INTO res FROM t1; RETURN res; END; | CREATE PROCEDURE fill_t2 (IN upb int) BEGIN DECLARE cnt int DEFAULT 0; WHILE cnt < upb DO INSERT INTO t2 VALUES (cnt, cnt+100, cnt, cnt+100); SET cnt= cnt+1; END WHILE; END; | CREATE FUNCTION half_t2() RETURNS int BEGIN DECLARE res int DEFAULT 0; SELECT MOD(k,2) INTO res FROM t2; RETURN res; END; | DELIMITER ;| eval CALL fill_t1 ($nbrows); eval CALL fill_t2 ($nbrows); COMMIT; SELECT @@global.tx_isolation; # With the two separate selects (without join) the differs from # that select with join. # Both transaction are able to update the tables eval EXPLAIN $select; eval $select; --echo connection root1; CONNECTION root1; #SELECT t1.i,t2.i FROM t1,t2 WHERE t1.k % 2= 1 AND t1.k = t2.k FOR UPDATE; DELETE FROM t1 WHERE t1.k % 2 = 1; SELECT * FROM t1 WHERE k < 20 ORDER BY t1.k; SELECT * FROM t2 WHERE k < 20 ORDER BY t2.k; --echo connection default; CONNECTION default; UPDATE t1,t2 SET t1.i=3333,t2.i=4444 WHERE t1.k % 2 = 0 AND t1.k = t2.k; SELECT * FROM t1 WHERE k < 20 ORDER BY t1.k; SELECT * FROM t2 WHERE k < 20 ORDER BY t2.k; COMMIT; --echo connection root1; CONNECTION root1; ROLLBACK; --echo connection default; CONNECTION default; SELECT * FROM t1 WHERE k < 40 ORDER BY t1.k; SELECT * FROM t2 WHERE k < 40 ORDER BY t2.k; --echo connection root1; CONNECTION root1; SELECT * FROM t1 WHERE k < 40 ORDER BY t1.k; SELECT * FROM t2 WHERE k < 40 ORDER BY t2.k; DISCONNECT root1; --echo connection default; CONNECTION default; DROP TABLE t1, t2;
mysql-test/suite/row_lock/include/row_lock_trig.inc 0 → 100644 +96 −0 Original line number Diff line number Diff line --disable_warnings DROP TABLE IF EXISTS t1, t2; DROP VIEW IF EXISTS v1; --enable_warnings SET autocommit=0; # Create additional connections used through test CONNECT (root1, localhost, root,,); SET autocommit=0; --echo connection default; CONNECTION default; eval CREATE TABLE t1 (k INT NOT NULL PRIMARY KEY, i INT, j INT, l INT) ENGINE=$engine; INSERT INTO t1 VALUES (1,123,1,123); INSERT INTO t1 VALUES (2,124,2,124); INSERT INTO t1 VALUES (3,125,3,125); INSERT INTO t1 VALUES (4,126,4,126); eval $indext1; eval CREATE TABLE t2 (k INT NOT NULL PRIMARY KEY, i INT, j INT, l INT) ENGINE=$engine; INSERT INTO t2 VALUES (1,123,1,123); INSERT INTO t2 VALUES (2,124,2,124); INSERT INTO t2 VALUES (3,125,3,125); INSERT INTO t2 VALUES (4,126,4,126); eval $indext2; DELIMITER |; CREATE TRIGGER trig_t2 AFTER UPDATE ON t2 FOR EACH ROW BEGIN UPDATE t1 SET l = NEW.i WHERE i = OLD.i; END; | DELIMITER ;| COMMIT; SELECT @@global.tx_isolation; # With the two separate selects (without join) the differs from # that select with join. # Both transaction are able to update the tables eval EXPLAIN $select; eval $select; --echo connection root1; CONNECTION root1; UPDATE t2 SET t2.i=225 WHERE t2.i=125; SELECT * FROM t1 ORDER BY t1.k; SELECT * FROM t2 ORDER BY t2.k; --echo connection default; CONNECTION default; UPDATE t2 SET t2.i=223 WHERE t2.i=123; SELECT * FROM t1 ORDER BY t1.k; SELECT * FROM t2 ORDER BY t2.k; --echo connection root1; CONNECTION root1; UPDATE t2 SET t2.i=226 WHERE t2.i=126; SELECT * FROM t1 ORDER BY t1.k; SELECT * FROM t2 ORDER BY t2.k; --echo connection default; CONNECTION default; UPDATE t2 SET t2.i=224 WHERE t2.i=124; SELECT * FROM t1 ORDER BY t1.k; SELECT * FROM t2 ORDER BY t2.k; --echo connection root1; CONNECTION root1; DELETE FROM t1 WHERE t1.i=226; SELECT * FROM t1 ORDER BY t1.k; SELECT * FROM t2 ORDER BY t2.k; --echo connection default; CONNECTION default; DELETE FROM t1 WHERE t1.i=224; SELECT * FROM t1 ORDER BY t1.k; SELECT * FROM t2 ORDER BY t2.k; COMMIT; --echo connection root1; CONNECTION root1; ROLLBACK; --echo connection default; CONNECTION default; SELECT * FROM t1 ORDER BY t1.k; SELECT * FROM t2 ORDER BY t2.k; --echo connection root1; CONNECTION root1; SELECT * FROM t1 ORDER BY t1.k; SELECT * FROM t2 ORDER BY t2.k; DISCONNECT root1; --echo connection default; CONNECTION default; DROP TABLE t1, t2; #DROP VIEW v1;