mirror of
				https://github.com/MariaDB/server.git
				synced 2025-11-03 14:33:32 +03:00 
			
		
		
		
	
		
			
				
	
	
		
			95 lines
		
	
	
		
			2.2 KiB
		
	
	
	
		
			SQL
		
	
	
	
	
	
			
		
		
	
	
			95 lines
		
	
	
		
			2.2 KiB
		
	
	
	
		
			SQL
		
	
	
	
	
	
--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;
 | 
						|
 |