mirror of
				https://github.com/MariaDB/server.git
				synced 2025-10-29 01:46:31 +01:00 
			
		
		
		
	 9608773f75
			
		
	
	
	9608773f75
	
	
	
		
			
			This essentially reverts commit 4e89ec6692
and only disables InnoDB persistent statistics for tests where it is
desirable. By design, InnoDB persistent statistics will not be updated
except by ANALYZE TABLE or by STATS_AUTO_RECALC.
The internal transactions that update persistent InnoDB statistics
in background tasks (with innodb_stats_auto_recalc=ON) may cause
nondeterministic query plans or interfere with some tests that deal
with other InnoDB internals, such as the purge of transaction history.
		
	
			
		
			
				
	
	
		
			1417 lines
		
	
	
	
		
			30 KiB
		
	
	
	
		
			Text
		
	
	
	
	
	
			
		
		
	
	
			1417 lines
		
	
	
	
		
			30 KiB
		
	
	
	
		
			Text
		
	
	
	
	
	
| #
 | |
| # WL#6742 - Test the interaction of multiple transactions using
 | |
| # different isolation levels to make sure that the value returned
 | |
| # by count(*) always reflects the correct view of the table according
 | |
| # to the transaction's selected isolation level.
 | |
| #
 | |
| #
 | |
| # Traverse various indexes to get the right counts.
 | |
| # This especially tests count(*) which is pushed down to InnoDB in WL#6742.
 | |
| #
 | |
| CREATE TABLE t1 (
 | |
| c1 INT AUTO_INCREMENT PRIMARY KEY,
 | |
| c2 INT,
 | |
| c3 INT,
 | |
| c4 INT,
 | |
| INDEX k2(c2)
 | |
| ) Engine=InnoDB;
 | |
| INSERT INTO t1(c2,c3,c4) VALUES (1, 1, 1);
 | |
| INSERT INTO t1(c2,c3,c4) VALUES (1, 1, 1);
 | |
| INSERT INTO t1(c2,c3,c4) VALUES (1, 1, 1);
 | |
| INSERT INTO t1(c2,c3,c4) VALUES (1, 1, 1);
 | |
| INSERT INTO t1(c2,c3,c4) VALUES (1, 1, 1);
 | |
| INSERT INTO t1(c2,c3,c4) VALUES (1, 1, 1);
 | |
| INSERT INTO t1(c2,c3,c4) VALUES (1, 1, 1);
 | |
| INSERT INTO t1(c2,c3,c4) VALUES (1, 1, 1);
 | |
| INSERT INTO t1(c2,c3,c4) VALUES (1, 1, 1);
 | |
| INSERT INTO t1(c2,c3,c4) VALUES (1, 1, 1);
 | |
| CREATE TABLE t2 LIKE t1;
 | |
| INSERT INTO t2 (SELECT * FROM t1);
 | |
| affected rows: 10
 | |
| info: Records: 10  Duplicates: 0  Warnings: 0
 | |
| ########## innodb_isolation_selects.inc ##########
 | |
| SELECT * FROM t1;
 | |
| c1	c2	c3	c4
 | |
| 1	1	1	1
 | |
| 2	1	1	1
 | |
| 3	1	1	1
 | |
| 4	1	1	1
 | |
| 5	1	1	1
 | |
| 6	1	1	1
 | |
| 7	1	1	1
 | |
| 8	1	1	1
 | |
| 9	1	1	1
 | |
| 10	1	1	1
 | |
| SELECT COUNT(*) FROM t1;
 | |
| COUNT(*)
 | |
| 10
 | |
| SELECT COUNT(c1) FROM t1;
 | |
| COUNT(c1)
 | |
| 10
 | |
| SELECT COUNT(c2) FROM t1;
 | |
| COUNT(c2)
 | |
| 10
 | |
| SELECT COUNT(c3) FROM t1;
 | |
| COUNT(c3)
 | |
| 10
 | |
| SELECT SUM(c1) FROM t1;
 | |
| SUM(c1)
 | |
| 55
 | |
| SELECT SUM(c2) FROM t1;
 | |
| SUM(c2)
 | |
| 10
 | |
| SELECT AVG(c1), MAX(c1), MIN(c2), AVG(c3), SUM(c4) FROM t1;
 | |
| AVG(c1)	MAX(c1)	MIN(c2)	AVG(c3)	SUM(c4)
 | |
| 5.5000	10	1	1.0000	10
 | |
| SELECT c1, c2 FROM t1 WHERE c1 > ((SELECT COUNT(*) FROM t1) / 2);
 | |
| c1	c2
 | |
| 6	1
 | |
| 7	1
 | |
| 8	1
 | |
| 9	1
 | |
| 10	1
 | |
| SELECT COUNT(c2) FROM t1 WHERE c1 > ((SELECT COUNT(*) FROM t1) / 2);
 | |
| COUNT(c2)
 | |
| 5
 | |
| SELECT COUNT(*) FROM t1 WHERE c1 > (SELECT AVG(c1) FROM t1);
 | |
| COUNT(*)
 | |
| 5
 | |
| ###############################################
 | |
| #
 | |
| # Do some DML in the default connection and leave the transaction pending.
 | |
| #
 | |
| SET SESSION TRANSACTION ISOLATION LEVEL REPEATABLE READ;
 | |
| BEGIN;
 | |
| UPDATE t1 SET c2 = c2 * 3 WHERE c1 = 1;
 | |
| affected rows: 1
 | |
| info: Rows matched: 1  Changed: 1  Warnings: 0
 | |
| DELETE FROM t1 WHERE c1 = 6;
 | |
| affected rows: 1
 | |
| ########## innodb_isolation_selects.inc ##########
 | |
| SELECT * FROM t1;
 | |
| c1	c2	c3	c4
 | |
| 1	3	1	1
 | |
| 2	1	1	1
 | |
| 3	1	1	1
 | |
| 4	1	1	1
 | |
| 5	1	1	1
 | |
| 7	1	1	1
 | |
| 8	1	1	1
 | |
| 9	1	1	1
 | |
| 10	1	1	1
 | |
| SELECT COUNT(*) FROM t1;
 | |
| COUNT(*)
 | |
| 9
 | |
| SELECT COUNT(c1) FROM t1;
 | |
| COUNT(c1)
 | |
| 9
 | |
| SELECT COUNT(c2) FROM t1;
 | |
| COUNT(c2)
 | |
| 9
 | |
| SELECT COUNT(c3) FROM t1;
 | |
| COUNT(c3)
 | |
| 9
 | |
| SELECT SUM(c1) FROM t1;
 | |
| SUM(c1)
 | |
| 49
 | |
| SELECT SUM(c2) FROM t1;
 | |
| SUM(c2)
 | |
| 11
 | |
| SELECT AVG(c1), MAX(c1), MIN(c2), AVG(c3), SUM(c4) FROM t1;
 | |
| AVG(c1)	MAX(c1)	MIN(c2)	AVG(c3)	SUM(c4)
 | |
| 5.4444	10	1	1.0000	9
 | |
| SELECT c1, c2 FROM t1 WHERE c1 > ((SELECT COUNT(*) FROM t1) / 2);
 | |
| c1	c2
 | |
| 5	1
 | |
| 7	1
 | |
| 8	1
 | |
| 9	1
 | |
| 10	1
 | |
| SELECT COUNT(c2) FROM t1 WHERE c1 > ((SELECT COUNT(*) FROM t1) / 2);
 | |
| COUNT(c2)
 | |
| 5
 | |
| SELECT COUNT(*) FROM t1 WHERE c1 > (SELECT AVG(c1) FROM t1);
 | |
| COUNT(*)
 | |
| 4
 | |
| ###############################################
 | |
| #
 | |
| # Start transactions of Repeatable Read, Read Committed, and Read Uncommitted
 | |
| #
 | |
| # Connection 1 REPEATABLE READ
 | |
| #
 | |
| connect  con1,localhost,root,,;
 | |
| SET SESSION TRANSACTION ISOLATION LEVEL REPEATABLE READ;
 | |
| BEGIN;
 | |
| ########## innodb_isolation_selects.inc ##########
 | |
| SELECT * FROM t1;
 | |
| c1	c2	c3	c4
 | |
| 1	1	1	1
 | |
| 2	1	1	1
 | |
| 3	1	1	1
 | |
| 4	1	1	1
 | |
| 5	1	1	1
 | |
| 6	1	1	1
 | |
| 7	1	1	1
 | |
| 8	1	1	1
 | |
| 9	1	1	1
 | |
| 10	1	1	1
 | |
| SELECT COUNT(*) FROM t1;
 | |
| COUNT(*)
 | |
| 10
 | |
| SELECT COUNT(c1) FROM t1;
 | |
| COUNT(c1)
 | |
| 10
 | |
| SELECT COUNT(c2) FROM t1;
 | |
| COUNT(c2)
 | |
| 10
 | |
| SELECT COUNT(c3) FROM t1;
 | |
| COUNT(c3)
 | |
| 10
 | |
| SELECT SUM(c1) FROM t1;
 | |
| SUM(c1)
 | |
| 55
 | |
| SELECT SUM(c2) FROM t1;
 | |
| SUM(c2)
 | |
| 10
 | |
| SELECT AVG(c1), MAX(c1), MIN(c2), AVG(c3), SUM(c4) FROM t1;
 | |
| AVG(c1)	MAX(c1)	MIN(c2)	AVG(c3)	SUM(c4)
 | |
| 5.5000	10	1	1.0000	10
 | |
| SELECT c1, c2 FROM t1 WHERE c1 > ((SELECT COUNT(*) FROM t1) / 2);
 | |
| c1	c2
 | |
| 6	1
 | |
| 7	1
 | |
| 8	1
 | |
| 9	1
 | |
| 10	1
 | |
| SELECT COUNT(c2) FROM t1 WHERE c1 > ((SELECT COUNT(*) FROM t1) / 2);
 | |
| COUNT(c2)
 | |
| 5
 | |
| SELECT COUNT(*) FROM t1 WHERE c1 > (SELECT AVG(c1) FROM t1);
 | |
| COUNT(*)
 | |
| 5
 | |
| ###############################################
 | |
| UPDATE t1 SET c2 = c2 * 5 WHERE c1 = 2;
 | |
| affected rows: 1
 | |
| info: Rows matched: 1  Changed: 1  Warnings: 0
 | |
| DELETE FROM t1 WHERE c1 = 7;
 | |
| affected rows: 1
 | |
| INSERT INTO t1(c2,c3,c4) VALUES (100, 1, 1);
 | |
| affected rows: 1
 | |
| ########## innodb_isolation_selects.inc ##########
 | |
| SELECT * FROM t1;
 | |
| c1	c2	c3	c4
 | |
| 1	1	1	1
 | |
| 2	5	1	1
 | |
| 3	1	1	1
 | |
| 4	1	1	1
 | |
| 5	1	1	1
 | |
| 6	1	1	1
 | |
| 8	1	1	1
 | |
| 9	1	1	1
 | |
| 10	1	1	1
 | |
| 11	100	1	1
 | |
| SELECT COUNT(*) FROM t1;
 | |
| COUNT(*)
 | |
| 10
 | |
| SELECT COUNT(c1) FROM t1;
 | |
| COUNT(c1)
 | |
| 10
 | |
| SELECT COUNT(c2) FROM t1;
 | |
| COUNT(c2)
 | |
| 10
 | |
| SELECT COUNT(c3) FROM t1;
 | |
| COUNT(c3)
 | |
| 10
 | |
| SELECT SUM(c1) FROM t1;
 | |
| SUM(c1)
 | |
| 59
 | |
| SELECT SUM(c2) FROM t1;
 | |
| SUM(c2)
 | |
| 113
 | |
| SELECT AVG(c1), MAX(c1), MIN(c2), AVG(c3), SUM(c4) FROM t1;
 | |
| AVG(c1)	MAX(c1)	MIN(c2)	AVG(c3)	SUM(c4)
 | |
| 5.9000	11	1	1.0000	10
 | |
| SELECT c1, c2 FROM t1 WHERE c1 > ((SELECT COUNT(*) FROM t1) / 2);
 | |
| c1	c2
 | |
| 6	1
 | |
| 8	1
 | |
| 9	1
 | |
| 10	1
 | |
| 11	100
 | |
| SELECT COUNT(c2) FROM t1 WHERE c1 > ((SELECT COUNT(*) FROM t1) / 2);
 | |
| COUNT(c2)
 | |
| 5
 | |
| SELECT COUNT(*) FROM t1 WHERE c1 > (SELECT AVG(c1) FROM t1);
 | |
| COUNT(*)
 | |
| 5
 | |
| ###############################################
 | |
| #
 | |
| # Test a lock wait timeout during COUNT(*)
 | |
| #
 | |
| SET innodb_lock_wait_timeout = 1;
 | |
| SELECT COUNT(*) FROM t1 FOR UPDATE;
 | |
| ERROR HY000: Lock wait timeout exceeded; try restarting transaction
 | |
| #
 | |
| # Connection 2 READ COMMITTED
 | |
| #
 | |
| connect  con2,localhost,root,,;
 | |
| SET SESSION TRANSACTION ISOLATION LEVEL READ COMMITTED;
 | |
| BEGIN;
 | |
| ########## innodb_isolation_selects.inc ##########
 | |
| SELECT * FROM t1;
 | |
| c1	c2	c3	c4
 | |
| 1	1	1	1
 | |
| 2	1	1	1
 | |
| 3	1	1	1
 | |
| 4	1	1	1
 | |
| 5	1	1	1
 | |
| 6	1	1	1
 | |
| 7	1	1	1
 | |
| 8	1	1	1
 | |
| 9	1	1	1
 | |
| 10	1	1	1
 | |
| SELECT COUNT(*) FROM t1;
 | |
| COUNT(*)
 | |
| 10
 | |
| SELECT COUNT(c1) FROM t1;
 | |
| COUNT(c1)
 | |
| 10
 | |
| SELECT COUNT(c2) FROM t1;
 | |
| COUNT(c2)
 | |
| 10
 | |
| SELECT COUNT(c3) FROM t1;
 | |
| COUNT(c3)
 | |
| 10
 | |
| SELECT SUM(c1) FROM t1;
 | |
| SUM(c1)
 | |
| 55
 | |
| SELECT SUM(c2) FROM t1;
 | |
| SUM(c2)
 | |
| 10
 | |
| SELECT AVG(c1), MAX(c1), MIN(c2), AVG(c3), SUM(c4) FROM t1;
 | |
| AVG(c1)	MAX(c1)	MIN(c2)	AVG(c3)	SUM(c4)
 | |
| 5.5000	10	1	1.0000	10
 | |
| SELECT c1, c2 FROM t1 WHERE c1 > ((SELECT COUNT(*) FROM t1) / 2);
 | |
| c1	c2
 | |
| 6	1
 | |
| 7	1
 | |
| 8	1
 | |
| 9	1
 | |
| 10	1
 | |
| SELECT COUNT(c2) FROM t1 WHERE c1 > ((SELECT COUNT(*) FROM t1) / 2);
 | |
| COUNT(c2)
 | |
| 5
 | |
| SELECT COUNT(*) FROM t1 WHERE c1 > (SELECT AVG(c1) FROM t1);
 | |
| COUNT(*)
 | |
| 5
 | |
| ###############################################
 | |
| UPDATE t1 SET c2 = c2 * 7 WHERE c1 = 3;
 | |
| affected rows: 1
 | |
| info: Rows matched: 1  Changed: 1  Warnings: 0
 | |
| DELETE FROM t1 WHERE c1 = 8;
 | |
| affected rows: 1
 | |
| INSERT INTO t1(c2,c3,c4) VALUES (1000, 1, 1);
 | |
| affected rows: 1
 | |
| ########## innodb_isolation_selects.inc ##########
 | |
| SELECT * FROM t1;
 | |
| c1	c2	c3	c4
 | |
| 1	1	1	1
 | |
| 2	1	1	1
 | |
| 3	7	1	1
 | |
| 4	1	1	1
 | |
| 5	1	1	1
 | |
| 6	1	1	1
 | |
| 7	1	1	1
 | |
| 9	1	1	1
 | |
| 10	1	1	1
 | |
| 12	1000	1	1
 | |
| SELECT COUNT(*) FROM t1;
 | |
| COUNT(*)
 | |
| 10
 | |
| SELECT COUNT(c1) FROM t1;
 | |
| COUNT(c1)
 | |
| 10
 | |
| SELECT COUNT(c2) FROM t1;
 | |
| COUNT(c2)
 | |
| 10
 | |
| SELECT COUNT(c3) FROM t1;
 | |
| COUNT(c3)
 | |
| 10
 | |
| SELECT SUM(c1) FROM t1;
 | |
| SUM(c1)
 | |
| 59
 | |
| SELECT SUM(c2) FROM t1;
 | |
| SUM(c2)
 | |
| 1015
 | |
| SELECT AVG(c1), MAX(c1), MIN(c2), AVG(c3), SUM(c4) FROM t1;
 | |
| AVG(c1)	MAX(c1)	MIN(c2)	AVG(c3)	SUM(c4)
 | |
| 5.9000	12	1	1.0000	10
 | |
| SELECT c1, c2 FROM t1 WHERE c1 > ((SELECT COUNT(*) FROM t1) / 2);
 | |
| c1	c2
 | |
| 6	1
 | |
| 7	1
 | |
| 9	1
 | |
| 10	1
 | |
| 12	1000
 | |
| SELECT COUNT(c2) FROM t1 WHERE c1 > ((SELECT COUNT(*) FROM t1) / 2);
 | |
| COUNT(c2)
 | |
| 5
 | |
| SELECT COUNT(*) FROM t1 WHERE c1 > (SELECT AVG(c1) FROM t1);
 | |
| COUNT(*)
 | |
| 5
 | |
| ###############################################
 | |
| #
 | |
| # Connection 3  READ UNCOMMITTED
 | |
| #
 | |
| connect  con3,localhost,root,,;
 | |
| SET SESSION TRANSACTION ISOLATION LEVEL READ UNCOMMITTED;
 | |
| BEGIN;
 | |
| ########## innodb_isolation_selects.inc ##########
 | |
| SELECT * FROM t1;
 | |
| c1	c2	c3	c4
 | |
| 1	3	1	1
 | |
| 2	5	1	1
 | |
| 3	7	1	1
 | |
| 4	1	1	1
 | |
| 5	1	1	1
 | |
| 9	1	1	1
 | |
| 10	1	1	1
 | |
| 11	100	1	1
 | |
| 12	1000	1	1
 | |
| SELECT COUNT(*) FROM t1;
 | |
| COUNT(*)
 | |
| 9
 | |
| SELECT COUNT(c1) FROM t1;
 | |
| COUNT(c1)
 | |
| 9
 | |
| SELECT COUNT(c2) FROM t1;
 | |
| COUNT(c2)
 | |
| 9
 | |
| SELECT COUNT(c3) FROM t1;
 | |
| COUNT(c3)
 | |
| 9
 | |
| SELECT SUM(c1) FROM t1;
 | |
| SUM(c1)
 | |
| 57
 | |
| SELECT SUM(c2) FROM t1;
 | |
| SUM(c2)
 | |
| 1119
 | |
| SELECT AVG(c1), MAX(c1), MIN(c2), AVG(c3), SUM(c4) FROM t1;
 | |
| AVG(c1)	MAX(c1)	MIN(c2)	AVG(c3)	SUM(c4)
 | |
| 6.3333	12	1	1.0000	9
 | |
| SELECT c1, c2 FROM t1 WHERE c1 > ((SELECT COUNT(*) FROM t1) / 2);
 | |
| c1	c2
 | |
| 5	1
 | |
| 9	1
 | |
| 10	1
 | |
| 11	100
 | |
| 12	1000
 | |
| SELECT COUNT(c2) FROM t1 WHERE c1 > ((SELECT COUNT(*) FROM t1) / 2);
 | |
| COUNT(c2)
 | |
| 5
 | |
| SELECT COUNT(*) FROM t1 WHERE c1 > (SELECT AVG(c1) FROM t1);
 | |
| COUNT(*)
 | |
| 4
 | |
| ###############################################
 | |
| UPDATE t1 SET c2 = c2 * 11 WHERE c1 = 4;
 | |
| affected rows: 1
 | |
| info: Rows matched: 1  Changed: 1  Warnings: 0
 | |
| INSERT INTO t1(c2,c3,c4) VALUES (10000, 1, 1);
 | |
| affected rows: 1
 | |
| DELETE FROM t1 WHERE c1 in(9);
 | |
| affected rows: 1
 | |
| ########## innodb_isolation_selects.inc ##########
 | |
| SELECT * FROM t1;
 | |
| c1	c2	c3	c4
 | |
| 1	3	1	1
 | |
| 2	5	1	1
 | |
| 3	7	1	1
 | |
| 4	11	1	1
 | |
| 5	1	1	1
 | |
| 10	1	1	1
 | |
| 11	100	1	1
 | |
| 12	1000	1	1
 | |
| 13	10000	1	1
 | |
| SELECT COUNT(*) FROM t1;
 | |
| COUNT(*)
 | |
| 9
 | |
| SELECT COUNT(c1) FROM t1;
 | |
| COUNT(c1)
 | |
| 9
 | |
| SELECT COUNT(c2) FROM t1;
 | |
| COUNT(c2)
 | |
| 9
 | |
| SELECT COUNT(c3) FROM t1;
 | |
| COUNT(c3)
 | |
| 9
 | |
| SELECT SUM(c1) FROM t1;
 | |
| SUM(c1)
 | |
| 61
 | |
| SELECT SUM(c2) FROM t1;
 | |
| SUM(c2)
 | |
| 11128
 | |
| SELECT AVG(c1), MAX(c1), MIN(c2), AVG(c3), SUM(c4) FROM t1;
 | |
| AVG(c1)	MAX(c1)	MIN(c2)	AVG(c3)	SUM(c4)
 | |
| 6.7778	13	1	1.0000	9
 | |
| SELECT c1, c2 FROM t1 WHERE c1 > ((SELECT COUNT(*) FROM t1) / 2);
 | |
| c1	c2
 | |
| 5	1
 | |
| 10	1
 | |
| 11	100
 | |
| 12	1000
 | |
| 13	10000
 | |
| SELECT COUNT(c2) FROM t1 WHERE c1 > ((SELECT COUNT(*) FROM t1) / 2);
 | |
| COUNT(c2)
 | |
| 5
 | |
| SELECT COUNT(*) FROM t1 WHERE c1 > (SELECT AVG(c1) FROM t1);
 | |
| COUNT(*)
 | |
| 4
 | |
| ###############################################
 | |
| #
 | |
| # Connection default REPEATABLE READ
 | |
| #
 | |
| connection default;
 | |
| ########## innodb_isolation_selects.inc ##########
 | |
| SELECT * FROM t1;
 | |
| c1	c2	c3	c4
 | |
| 1	3	1	1
 | |
| 2	1	1	1
 | |
| 3	1	1	1
 | |
| 4	1	1	1
 | |
| 5	1	1	1
 | |
| 7	1	1	1
 | |
| 8	1	1	1
 | |
| 9	1	1	1
 | |
| 10	1	1	1
 | |
| SELECT COUNT(*) FROM t1;
 | |
| COUNT(*)
 | |
| 9
 | |
| SELECT COUNT(c1) FROM t1;
 | |
| COUNT(c1)
 | |
| 9
 | |
| SELECT COUNT(c2) FROM t1;
 | |
| COUNT(c2)
 | |
| 9
 | |
| SELECT COUNT(c3) FROM t1;
 | |
| COUNT(c3)
 | |
| 9
 | |
| SELECT SUM(c1) FROM t1;
 | |
| SUM(c1)
 | |
| 49
 | |
| SELECT SUM(c2) FROM t1;
 | |
| SUM(c2)
 | |
| 11
 | |
| SELECT AVG(c1), MAX(c1), MIN(c2), AVG(c3), SUM(c4) FROM t1;
 | |
| AVG(c1)	MAX(c1)	MIN(c2)	AVG(c3)	SUM(c4)
 | |
| 5.4444	10	1	1.0000	9
 | |
| SELECT c1, c2 FROM t1 WHERE c1 > ((SELECT COUNT(*) FROM t1) / 2);
 | |
| c1	c2
 | |
| 5	1
 | |
| 7	1
 | |
| 8	1
 | |
| 9	1
 | |
| 10	1
 | |
| SELECT COUNT(c2) FROM t1 WHERE c1 > ((SELECT COUNT(*) FROM t1) / 2);
 | |
| COUNT(c2)
 | |
| 5
 | |
| SELECT COUNT(*) FROM t1 WHERE c1 > (SELECT AVG(c1) FROM t1);
 | |
| COUNT(*)
 | |
| 4
 | |
| ###############################################
 | |
| #
 | |
| # Commit the 3 extra connections
 | |
| #
 | |
| # Connection 1 REPEATABLE READ
 | |
| #
 | |
| connection con1;
 | |
| ########## innodb_isolation_selects.inc ##########
 | |
| SELECT * FROM t1;
 | |
| c1	c2	c3	c4
 | |
| 1	1	1	1
 | |
| 2	5	1	1
 | |
| 3	1	1	1
 | |
| 4	1	1	1
 | |
| 5	1	1	1
 | |
| 6	1	1	1
 | |
| 8	1	1	1
 | |
| 9	1	1	1
 | |
| 10	1	1	1
 | |
| 11	100	1	1
 | |
| SELECT COUNT(*) FROM t1;
 | |
| COUNT(*)
 | |
| 10
 | |
| SELECT COUNT(c1) FROM t1;
 | |
| COUNT(c1)
 | |
| 10
 | |
| SELECT COUNT(c2) FROM t1;
 | |
| COUNT(c2)
 | |
| 10
 | |
| SELECT COUNT(c3) FROM t1;
 | |
| COUNT(c3)
 | |
| 10
 | |
| SELECT SUM(c1) FROM t1;
 | |
| SUM(c1)
 | |
| 59
 | |
| SELECT SUM(c2) FROM t1;
 | |
| SUM(c2)
 | |
| 113
 | |
| SELECT AVG(c1), MAX(c1), MIN(c2), AVG(c3), SUM(c4) FROM t1;
 | |
| AVG(c1)	MAX(c1)	MIN(c2)	AVG(c3)	SUM(c4)
 | |
| 5.9000	11	1	1.0000	10
 | |
| SELECT c1, c2 FROM t1 WHERE c1 > ((SELECT COUNT(*) FROM t1) / 2);
 | |
| c1	c2
 | |
| 6	1
 | |
| 8	1
 | |
| 9	1
 | |
| 10	1
 | |
| 11	100
 | |
| SELECT COUNT(c2) FROM t1 WHERE c1 > ((SELECT COUNT(*) FROM t1) / 2);
 | |
| COUNT(c2)
 | |
| 5
 | |
| SELECT COUNT(*) FROM t1 WHERE c1 > (SELECT AVG(c1) FROM t1);
 | |
| COUNT(*)
 | |
| 5
 | |
| ###############################################
 | |
| #
 | |
| # Connection 2 READ COMMITTED
 | |
| #
 | |
| connection con2;
 | |
| ########## innodb_isolation_selects.inc ##########
 | |
| SELECT * FROM t1;
 | |
| c1	c2	c3	c4
 | |
| 1	1	1	1
 | |
| 2	1	1	1
 | |
| 3	7	1	1
 | |
| 4	1	1	1
 | |
| 5	1	1	1
 | |
| 6	1	1	1
 | |
| 7	1	1	1
 | |
| 9	1	1	1
 | |
| 10	1	1	1
 | |
| 12	1000	1	1
 | |
| SELECT COUNT(*) FROM t1;
 | |
| COUNT(*)
 | |
| 10
 | |
| SELECT COUNT(c1) FROM t1;
 | |
| COUNT(c1)
 | |
| 10
 | |
| SELECT COUNT(c2) FROM t1;
 | |
| COUNT(c2)
 | |
| 10
 | |
| SELECT COUNT(c3) FROM t1;
 | |
| COUNT(c3)
 | |
| 10
 | |
| SELECT SUM(c1) FROM t1;
 | |
| SUM(c1)
 | |
| 59
 | |
| SELECT SUM(c2) FROM t1;
 | |
| SUM(c2)
 | |
| 1015
 | |
| SELECT AVG(c1), MAX(c1), MIN(c2), AVG(c3), SUM(c4) FROM t1;
 | |
| AVG(c1)	MAX(c1)	MIN(c2)	AVG(c3)	SUM(c4)
 | |
| 5.9000	12	1	1.0000	10
 | |
| SELECT c1, c2 FROM t1 WHERE c1 > ((SELECT COUNT(*) FROM t1) / 2);
 | |
| c1	c2
 | |
| 6	1
 | |
| 7	1
 | |
| 9	1
 | |
| 10	1
 | |
| 12	1000
 | |
| SELECT COUNT(c2) FROM t1 WHERE c1 > ((SELECT COUNT(*) FROM t1) / 2);
 | |
| COUNT(c2)
 | |
| 5
 | |
| SELECT COUNT(*) FROM t1 WHERE c1 > (SELECT AVG(c1) FROM t1);
 | |
| COUNT(*)
 | |
| 5
 | |
| ###############################################
 | |
| #
 | |
| # Connection 3  READ UNCOMMITTED
 | |
| #
 | |
| connection con3;
 | |
| ########## innodb_isolation_selects.inc ##########
 | |
| SELECT * FROM t1;
 | |
| c1	c2	c3	c4
 | |
| 1	3	1	1
 | |
| 2	5	1	1
 | |
| 3	7	1	1
 | |
| 4	11	1	1
 | |
| 5	1	1	1
 | |
| 10	1	1	1
 | |
| 11	100	1	1
 | |
| 12	1000	1	1
 | |
| 13	10000	1	1
 | |
| SELECT COUNT(*) FROM t1;
 | |
| COUNT(*)
 | |
| 9
 | |
| SELECT COUNT(c1) FROM t1;
 | |
| COUNT(c1)
 | |
| 9
 | |
| SELECT COUNT(c2) FROM t1;
 | |
| COUNT(c2)
 | |
| 9
 | |
| SELECT COUNT(c3) FROM t1;
 | |
| COUNT(c3)
 | |
| 9
 | |
| SELECT SUM(c1) FROM t1;
 | |
| SUM(c1)
 | |
| 61
 | |
| SELECT SUM(c2) FROM t1;
 | |
| SUM(c2)
 | |
| 11128
 | |
| SELECT AVG(c1), MAX(c1), MIN(c2), AVG(c3), SUM(c4) FROM t1;
 | |
| AVG(c1)	MAX(c1)	MIN(c2)	AVG(c3)	SUM(c4)
 | |
| 6.7778	13	1	1.0000	9
 | |
| SELECT c1, c2 FROM t1 WHERE c1 > ((SELECT COUNT(*) FROM t1) / 2);
 | |
| c1	c2
 | |
| 5	1
 | |
| 10	1
 | |
| 11	100
 | |
| 12	1000
 | |
| 13	10000
 | |
| SELECT COUNT(c2) FROM t1 WHERE c1 > ((SELECT COUNT(*) FROM t1) / 2);
 | |
| COUNT(c2)
 | |
| 5
 | |
| SELECT COUNT(*) FROM t1 WHERE c1 > (SELECT AVG(c1) FROM t1);
 | |
| COUNT(*)
 | |
| 4
 | |
| ###############################################
 | |
| COMMIT;
 | |
| ########## innodb_isolation_selects.inc ##########
 | |
| SELECT * FROM t1;
 | |
| c1	c2	c3	c4
 | |
| 1	3	1	1
 | |
| 2	5	1	1
 | |
| 3	7	1	1
 | |
| 4	11	1	1
 | |
| 5	1	1	1
 | |
| 10	1	1	1
 | |
| 11	100	1	1
 | |
| 12	1000	1	1
 | |
| 13	10000	1	1
 | |
| SELECT COUNT(*) FROM t1;
 | |
| COUNT(*)
 | |
| 9
 | |
| SELECT COUNT(c1) FROM t1;
 | |
| COUNT(c1)
 | |
| 9
 | |
| SELECT COUNT(c2) FROM t1;
 | |
| COUNT(c2)
 | |
| 9
 | |
| SELECT COUNT(c3) FROM t1;
 | |
| COUNT(c3)
 | |
| 9
 | |
| SELECT SUM(c1) FROM t1;
 | |
| SUM(c1)
 | |
| 61
 | |
| SELECT SUM(c2) FROM t1;
 | |
| SUM(c2)
 | |
| 11128
 | |
| SELECT AVG(c1), MAX(c1), MIN(c2), AVG(c3), SUM(c4) FROM t1;
 | |
| AVG(c1)	MAX(c1)	MIN(c2)	AVG(c3)	SUM(c4)
 | |
| 6.7778	13	1	1.0000	9
 | |
| SELECT c1, c2 FROM t1 WHERE c1 > ((SELECT COUNT(*) FROM t1) / 2);
 | |
| c1	c2
 | |
| 5	1
 | |
| 10	1
 | |
| 11	100
 | |
| 12	1000
 | |
| 13	10000
 | |
| SELECT COUNT(c2) FROM t1 WHERE c1 > ((SELECT COUNT(*) FROM t1) / 2);
 | |
| COUNT(c2)
 | |
| 5
 | |
| SELECT COUNT(*) FROM t1 WHERE c1 > (SELECT AVG(c1) FROM t1);
 | |
| COUNT(*)
 | |
| 4
 | |
| ###############################################
 | |
| #
 | |
| # Connection 2 READ COMMITTED
 | |
| #
 | |
| connection con2;
 | |
| ########## innodb_isolation_selects.inc ##########
 | |
| SELECT * FROM t1;
 | |
| c1	c2	c3	c4
 | |
| 1	1	1	1
 | |
| 2	1	1	1
 | |
| 3	7	1	1
 | |
| 4	11	1	1
 | |
| 5	1	1	1
 | |
| 6	1	1	1
 | |
| 7	1	1	1
 | |
| 10	1	1	1
 | |
| 12	1000	1	1
 | |
| 13	10000	1	1
 | |
| SELECT COUNT(*) FROM t1;
 | |
| COUNT(*)
 | |
| 10
 | |
| SELECT COUNT(c1) FROM t1;
 | |
| COUNT(c1)
 | |
| 10
 | |
| SELECT COUNT(c2) FROM t1;
 | |
| COUNT(c2)
 | |
| 10
 | |
| SELECT COUNT(c3) FROM t1;
 | |
| COUNT(c3)
 | |
| 10
 | |
| SELECT SUM(c1) FROM t1;
 | |
| SUM(c1)
 | |
| 63
 | |
| SELECT SUM(c2) FROM t1;
 | |
| SUM(c2)
 | |
| 11024
 | |
| SELECT AVG(c1), MAX(c1), MIN(c2), AVG(c3), SUM(c4) FROM t1;
 | |
| AVG(c1)	MAX(c1)	MIN(c2)	AVG(c3)	SUM(c4)
 | |
| 6.3000	13	1	1.0000	10
 | |
| SELECT c1, c2 FROM t1 WHERE c1 > ((SELECT COUNT(*) FROM t1) / 2);
 | |
| c1	c2
 | |
| 6	1
 | |
| 7	1
 | |
| 10	1
 | |
| 12	1000
 | |
| 13	10000
 | |
| SELECT COUNT(c2) FROM t1 WHERE c1 > ((SELECT COUNT(*) FROM t1) / 2);
 | |
| COUNT(c2)
 | |
| 5
 | |
| SELECT COUNT(*) FROM t1 WHERE c1 > (SELECT AVG(c1) FROM t1);
 | |
| COUNT(*)
 | |
| 4
 | |
| ###############################################
 | |
| COMMIT;
 | |
| ########## innodb_isolation_selects.inc ##########
 | |
| SELECT * FROM t1;
 | |
| c1	c2	c3	c4
 | |
| 1	1	1	1
 | |
| 2	1	1	1
 | |
| 3	7	1	1
 | |
| 4	11	1	1
 | |
| 5	1	1	1
 | |
| 6	1	1	1
 | |
| 7	1	1	1
 | |
| 10	1	1	1
 | |
| 12	1000	1	1
 | |
| 13	10000	1	1
 | |
| SELECT COUNT(*) FROM t1;
 | |
| COUNT(*)
 | |
| 10
 | |
| SELECT COUNT(c1) FROM t1;
 | |
| COUNT(c1)
 | |
| 10
 | |
| SELECT COUNT(c2) FROM t1;
 | |
| COUNT(c2)
 | |
| 10
 | |
| SELECT COUNT(c3) FROM t1;
 | |
| COUNT(c3)
 | |
| 10
 | |
| SELECT SUM(c1) FROM t1;
 | |
| SUM(c1)
 | |
| 63
 | |
| SELECT SUM(c2) FROM t1;
 | |
| SUM(c2)
 | |
| 11024
 | |
| SELECT AVG(c1), MAX(c1), MIN(c2), AVG(c3), SUM(c4) FROM t1;
 | |
| AVG(c1)	MAX(c1)	MIN(c2)	AVG(c3)	SUM(c4)
 | |
| 6.3000	13	1	1.0000	10
 | |
| SELECT c1, c2 FROM t1 WHERE c1 > ((SELECT COUNT(*) FROM t1) / 2);
 | |
| c1	c2
 | |
| 6	1
 | |
| 7	1
 | |
| 10	1
 | |
| 12	1000
 | |
| 13	10000
 | |
| SELECT COUNT(c2) FROM t1 WHERE c1 > ((SELECT COUNT(*) FROM t1) / 2);
 | |
| COUNT(c2)
 | |
| 5
 | |
| SELECT COUNT(*) FROM t1 WHERE c1 > (SELECT AVG(c1) FROM t1);
 | |
| COUNT(*)
 | |
| 4
 | |
| ###############################################
 | |
| #
 | |
| # Connection 1 REPEATABLE READ
 | |
| #
 | |
| connection con1;
 | |
| ########## innodb_isolation_selects.inc ##########
 | |
| SELECT * FROM t1;
 | |
| c1	c2	c3	c4
 | |
| 1	1	1	1
 | |
| 2	5	1	1
 | |
| 3	1	1	1
 | |
| 4	1	1	1
 | |
| 5	1	1	1
 | |
| 6	1	1	1
 | |
| 8	1	1	1
 | |
| 9	1	1	1
 | |
| 10	1	1	1
 | |
| 11	100	1	1
 | |
| SELECT COUNT(*) FROM t1;
 | |
| COUNT(*)
 | |
| 10
 | |
| SELECT COUNT(c1) FROM t1;
 | |
| COUNT(c1)
 | |
| 10
 | |
| SELECT COUNT(c2) FROM t1;
 | |
| COUNT(c2)
 | |
| 10
 | |
| SELECT COUNT(c3) FROM t1;
 | |
| COUNT(c3)
 | |
| 10
 | |
| SELECT SUM(c1) FROM t1;
 | |
| SUM(c1)
 | |
| 59
 | |
| SELECT SUM(c2) FROM t1;
 | |
| SUM(c2)
 | |
| 113
 | |
| SELECT AVG(c1), MAX(c1), MIN(c2), AVG(c3), SUM(c4) FROM t1;
 | |
| AVG(c1)	MAX(c1)	MIN(c2)	AVG(c3)	SUM(c4)
 | |
| 5.9000	11	1	1.0000	10
 | |
| SELECT c1, c2 FROM t1 WHERE c1 > ((SELECT COUNT(*) FROM t1) / 2);
 | |
| c1	c2
 | |
| 6	1
 | |
| 8	1
 | |
| 9	1
 | |
| 10	1
 | |
| 11	100
 | |
| SELECT COUNT(c2) FROM t1 WHERE c1 > ((SELECT COUNT(*) FROM t1) / 2);
 | |
| COUNT(c2)
 | |
| 5
 | |
| SELECT COUNT(*) FROM t1 WHERE c1 > (SELECT AVG(c1) FROM t1);
 | |
| COUNT(*)
 | |
| 5
 | |
| ###############################################
 | |
| #
 | |
| # Select the first 5 records FOR UPDATE using count(*) in a subquery.
 | |
| # The second record is still pending so we get a lock timeout.
 | |
| #
 | |
| SET innodb_lock_wait_timeout = 1;
 | |
| SELECT c1, c2 FROM t1 WHERE c1 < ((SELECT COUNT(*) FROM t1) / 2) FOR UPDATE;
 | |
| ERROR HY000: Lock wait timeout exceeded; try restarting transaction
 | |
| SELECT COUNT(*) FROM t1 FOR UPDATE;
 | |
| ERROR HY000: Lock wait timeout exceeded; try restarting transaction
 | |
| COMMIT;
 | |
| ########## innodb_isolation_selects.inc ##########
 | |
| SELECT * FROM t1;
 | |
| c1	c2	c3	c4
 | |
| 1	1	1	1
 | |
| 2	5	1	1
 | |
| 3	7	1	1
 | |
| 4	11	1	1
 | |
| 5	1	1	1
 | |
| 6	1	1	1
 | |
| 10	1	1	1
 | |
| 11	100	1	1
 | |
| 12	1000	1	1
 | |
| 13	10000	1	1
 | |
| SELECT COUNT(*) FROM t1;
 | |
| COUNT(*)
 | |
| 10
 | |
| SELECT COUNT(c1) FROM t1;
 | |
| COUNT(c1)
 | |
| 10
 | |
| SELECT COUNT(c2) FROM t1;
 | |
| COUNT(c2)
 | |
| 10
 | |
| SELECT COUNT(c3) FROM t1;
 | |
| COUNT(c3)
 | |
| 10
 | |
| SELECT SUM(c1) FROM t1;
 | |
| SUM(c1)
 | |
| 67
 | |
| SELECT SUM(c2) FROM t1;
 | |
| SUM(c2)
 | |
| 11127
 | |
| SELECT AVG(c1), MAX(c1), MIN(c2), AVG(c3), SUM(c4) FROM t1;
 | |
| AVG(c1)	MAX(c1)	MIN(c2)	AVG(c3)	SUM(c4)
 | |
| 6.7000	13	1	1.0000	10
 | |
| SELECT c1, c2 FROM t1 WHERE c1 > ((SELECT COUNT(*) FROM t1) / 2);
 | |
| c1	c2
 | |
| 6	1
 | |
| 10	1
 | |
| 11	100
 | |
| 12	1000
 | |
| 13	10000
 | |
| SELECT COUNT(c2) FROM t1 WHERE c1 > ((SELECT COUNT(*) FROM t1) / 2);
 | |
| COUNT(c2)
 | |
| 5
 | |
| SELECT COUNT(*) FROM t1 WHERE c1 > (SELECT AVG(c1) FROM t1);
 | |
| COUNT(*)
 | |
| 4
 | |
| ###############################################
 | |
| #
 | |
| # Show The EXPLAIN output for these queries;
 | |
| #
 | |
| EXPLAIN SELECT * FROM t1;
 | |
| id	select_type	table	type	possible_keys	key	key_len	ref	rows	Extra
 | |
| 1	SIMPLE	t1	ALL	NULL	NULL	NULL	NULL	#	
 | |
| EXPLAIN SELECT COUNT(*) FROM t1;
 | |
| id	select_type	table	type	possible_keys	key	key_len	ref	rows	Extra
 | |
| 1	SIMPLE	t1	index	NULL	k2	5	NULL	#	Using index
 | |
| EXPLAIN SELECT COUNT(c1) FROM t1;
 | |
| id	select_type	table	type	possible_keys	key	key_len	ref	rows	Extra
 | |
| 1	SIMPLE	t1	index	NULL	k2	5	NULL	#	Using index
 | |
| EXPLAIN SELECT COUNT(c2) FROM t1;
 | |
| id	select_type	table	type	possible_keys	key	key_len	ref	rows	Extra
 | |
| 1	SIMPLE	t1	index	NULL	k2	5	NULL	#	Using index
 | |
| EXPLAIN SELECT COUNT(c3) FROM t1;
 | |
| id	select_type	table	type	possible_keys	key	key_len	ref	rows	Extra
 | |
| 1	SIMPLE	t1	ALL	NULL	NULL	NULL	NULL	#	
 | |
| EXPLAIN SELECT SUM(c1) FROM t1;
 | |
| id	select_type	table	type	possible_keys	key	key_len	ref	rows	Extra
 | |
| 1	SIMPLE	t1	index	NULL	k2	5	NULL	#	Using index
 | |
| EXPLAIN SELECT SUM(c2) FROM t1;
 | |
| id	select_type	table	type	possible_keys	key	key_len	ref	rows	Extra
 | |
| 1	SIMPLE	t1	index	NULL	k2	5	NULL	#	Using index
 | |
| EXPLAIN SELECT AVG(c1), MAX(c1), MIN(c2), AVG(c3), SUM(c4) FROM t1;
 | |
| id	select_type	table	type	possible_keys	key	key_len	ref	rows	Extra
 | |
| 1	SIMPLE	t1	ALL	NULL	NULL	NULL	NULL	#	
 | |
| EXPLAIN SELECT c1, c2 FROM t1 WHERE c1 > ((SELECT COUNT(*) FROM t1) / 2);
 | |
| id	select_type	table	type	possible_keys	key	key_len	ref	rows	Extra
 | |
| 1	PRIMARY	t1	range	PRIMARY	PRIMARY	4	NULL	#	Using where
 | |
| 2	SUBQUERY	t1	index	NULL	k2	5	NULL	#	Using index
 | |
| EXPLAIN SELECT COUNT(c2) FROM t1 WHERE c1 > ((SELECT COUNT(*) FROM t1) / 2);
 | |
| id	select_type	table	type	possible_keys	key	key_len	ref	rows	Extra
 | |
| 1	PRIMARY	t1	range	PRIMARY	PRIMARY	4	NULL	#	Using where
 | |
| 2	SUBQUERY	t1	index	NULL	k2	5	NULL	#	Using index
 | |
| EXPLAIN SELECT COUNT(*) FROM t1 WHERE c1 > (SELECT AVG(c1) FROM t1);
 | |
| id	select_type	table	type	possible_keys	key	key_len	ref	rows	Extra
 | |
| 1	PRIMARY	t1	range	PRIMARY	PRIMARY	4	NULL	#	Using where; Using index
 | |
| 2	SUBQUERY	t1	index	NULL	k2	5	NULL	#	Using index
 | |
| #
 | |
| # Make all indexes in t2 obsolete to the active repeatable read transaction
 | |
| # in the default connection.
 | |
| #
 | |
| ALTER TABLE t2 row_format=redundant;
 | |
| #
 | |
| # Connection default REPEATABLE READ
 | |
| # Do more DML in the default REPEATABLE READ transaction in order to use recently committed records.
 | |
| #
 | |
| connection default;
 | |
| ########## innodb_isolation_selects.inc ##########
 | |
| SELECT * FROM t1;
 | |
| c1	c2	c3	c4
 | |
| 1	3	1	1
 | |
| 2	1	1	1
 | |
| 3	1	1	1
 | |
| 4	1	1	1
 | |
| 5	1	1	1
 | |
| 7	1	1	1
 | |
| 8	1	1	1
 | |
| 9	1	1	1
 | |
| 10	1	1	1
 | |
| SELECT COUNT(*) FROM t1;
 | |
| COUNT(*)
 | |
| 9
 | |
| SELECT COUNT(c1) FROM t1;
 | |
| COUNT(c1)
 | |
| 9
 | |
| SELECT COUNT(c2) FROM t1;
 | |
| COUNT(c2)
 | |
| 9
 | |
| SELECT COUNT(c3) FROM t1;
 | |
| COUNT(c3)
 | |
| 9
 | |
| SELECT SUM(c1) FROM t1;
 | |
| SUM(c1)
 | |
| 49
 | |
| SELECT SUM(c2) FROM t1;
 | |
| SUM(c2)
 | |
| 11
 | |
| SELECT AVG(c1), MAX(c1), MIN(c2), AVG(c3), SUM(c4) FROM t1;
 | |
| AVG(c1)	MAX(c1)	MIN(c2)	AVG(c3)	SUM(c4)
 | |
| 5.4444	10	1	1.0000	9
 | |
| SELECT c1, c2 FROM t1 WHERE c1 > ((SELECT COUNT(*) FROM t1) / 2);
 | |
| c1	c2
 | |
| 5	1
 | |
| 7	1
 | |
| 8	1
 | |
| 9	1
 | |
| 10	1
 | |
| SELECT COUNT(c2) FROM t1 WHERE c1 > ((SELECT COUNT(*) FROM t1) / 2);
 | |
| COUNT(c2)
 | |
| 5
 | |
| SELECT COUNT(*) FROM t1 WHERE c1 > (SELECT AVG(c1) FROM t1);
 | |
| COUNT(*)
 | |
| 4
 | |
| ###############################################
 | |
| UPDATE t1 SET c4 = c2 * 10;
 | |
| affected rows: 9
 | |
| info: Rows matched: 9  Changed: 9  Warnings: 0
 | |
| ########## innodb_isolation_selects.inc ##########
 | |
| SELECT * FROM t1;
 | |
| c1	c2	c3	c4
 | |
| 1	3	1	30
 | |
| 2	5	1	50
 | |
| 3	7	1	70
 | |
| 4	11	1	110
 | |
| 5	1	1	10
 | |
| 7	1	1	1
 | |
| 8	1	1	1
 | |
| 9	1	1	1
 | |
| 10	1	1	10
 | |
| 11	100	1	1000
 | |
| 12	1000	1	10000
 | |
| 13	10000	1	100000
 | |
| SELECT COUNT(*) FROM t1;
 | |
| COUNT(*)
 | |
| 12
 | |
| SELECT COUNT(c1) FROM t1;
 | |
| COUNT(c1)
 | |
| 12
 | |
| SELECT COUNT(c2) FROM t1;
 | |
| COUNT(c2)
 | |
| 12
 | |
| SELECT COUNT(c3) FROM t1;
 | |
| COUNT(c3)
 | |
| 12
 | |
| SELECT SUM(c1) FROM t1;
 | |
| SUM(c1)
 | |
| 85
 | |
| SELECT SUM(c2) FROM t1;
 | |
| SUM(c2)
 | |
| 11131
 | |
| SELECT AVG(c1), MAX(c1), MIN(c2), AVG(c3), SUM(c4) FROM t1;
 | |
| AVG(c1)	MAX(c1)	MIN(c2)	AVG(c3)	SUM(c4)
 | |
| 7.0833	13	1	1.0000	111283
 | |
| SELECT c1, c2 FROM t1 WHERE c1 > ((SELECT COUNT(*) FROM t1) / 2);
 | |
| c1	c2
 | |
| 7	1
 | |
| 8	1
 | |
| 9	1
 | |
| 10	1
 | |
| 11	100
 | |
| 12	1000
 | |
| 13	10000
 | |
| SELECT COUNT(c2) FROM t1 WHERE c1 > ((SELECT COUNT(*) FROM t1) / 2);
 | |
| COUNT(c2)
 | |
| 7
 | |
| SELECT COUNT(*) FROM t1 WHERE c1 > (SELECT AVG(c1) FROM t1);
 | |
| COUNT(*)
 | |
| 6
 | |
| ###############################################
 | |
| #
 | |
| # Table t2 has been altered to a new row format.
 | |
| # The index should not be useable.
 | |
| #
 | |
| SELECT COUNT(*) FROM t2;
 | |
| ERROR HY000: Table definition has changed, please retry transaction
 | |
| SELECT * FROM t2;
 | |
| ERROR HY000: Table definition has changed, please retry transaction
 | |
| COMMIT;
 | |
| SELECT COUNT(*) FROM t2;
 | |
| COUNT(*)
 | |
| 10
 | |
| ########## innodb_isolation_selects.inc ##########
 | |
| SELECT * FROM t1;
 | |
| c1	c2	c3	c4
 | |
| 1	3	1	30
 | |
| 2	5	1	50
 | |
| 3	7	1	70
 | |
| 4	11	1	110
 | |
| 5	1	1	10
 | |
| 10	1	1	10
 | |
| 11	100	1	1000
 | |
| 12	1000	1	10000
 | |
| 13	10000	1	100000
 | |
| SELECT COUNT(*) FROM t1;
 | |
| COUNT(*)
 | |
| 9
 | |
| SELECT COUNT(c1) FROM t1;
 | |
| COUNT(c1)
 | |
| 9
 | |
| SELECT COUNT(c2) FROM t1;
 | |
| COUNT(c2)
 | |
| 9
 | |
| SELECT COUNT(c3) FROM t1;
 | |
| COUNT(c3)
 | |
| 9
 | |
| SELECT SUM(c1) FROM t1;
 | |
| SUM(c1)
 | |
| 61
 | |
| SELECT SUM(c2) FROM t1;
 | |
| SUM(c2)
 | |
| 11128
 | |
| SELECT AVG(c1), MAX(c1), MIN(c2), AVG(c3), SUM(c4) FROM t1;
 | |
| AVG(c1)	MAX(c1)	MIN(c2)	AVG(c3)	SUM(c4)
 | |
| 6.7778	13	1	1.0000	111280
 | |
| SELECT c1, c2 FROM t1 WHERE c1 > ((SELECT COUNT(*) FROM t1) / 2);
 | |
| c1	c2
 | |
| 5	1
 | |
| 10	1
 | |
| 11	100
 | |
| 12	1000
 | |
| 13	10000
 | |
| SELECT COUNT(c2) FROM t1 WHERE c1 > ((SELECT COUNT(*) FROM t1) / 2);
 | |
| COUNT(c2)
 | |
| 5
 | |
| SELECT COUNT(*) FROM t1 WHERE c1 > (SELECT AVG(c1) FROM t1);
 | |
| COUNT(*)
 | |
| 4
 | |
| ###############################################
 | |
| #
 | |
| # Connection 2
 | |
| #
 | |
| connection con2;
 | |
| ########## innodb_isolation_selects.inc ##########
 | |
| SELECT * FROM t1;
 | |
| c1	c2	c3	c4
 | |
| 1	3	1	30
 | |
| 2	5	1	50
 | |
| 3	7	1	70
 | |
| 4	11	1	110
 | |
| 5	1	1	10
 | |
| 10	1	1	10
 | |
| 11	100	1	1000
 | |
| 12	1000	1	10000
 | |
| 13	10000	1	100000
 | |
| SELECT COUNT(*) FROM t1;
 | |
| COUNT(*)
 | |
| 9
 | |
| SELECT COUNT(c1) FROM t1;
 | |
| COUNT(c1)
 | |
| 9
 | |
| SELECT COUNT(c2) FROM t1;
 | |
| COUNT(c2)
 | |
| 9
 | |
| SELECT COUNT(c3) FROM t1;
 | |
| COUNT(c3)
 | |
| 9
 | |
| SELECT SUM(c1) FROM t1;
 | |
| SUM(c1)
 | |
| 61
 | |
| SELECT SUM(c2) FROM t1;
 | |
| SUM(c2)
 | |
| 11128
 | |
| SELECT AVG(c1), MAX(c1), MIN(c2), AVG(c3), SUM(c4) FROM t1;
 | |
| AVG(c1)	MAX(c1)	MIN(c2)	AVG(c3)	SUM(c4)
 | |
| 6.7778	13	1	1.0000	111280
 | |
| SELECT c1, c2 FROM t1 WHERE c1 > ((SELECT COUNT(*) FROM t1) / 2);
 | |
| c1	c2
 | |
| 5	1
 | |
| 10	1
 | |
| 11	100
 | |
| 12	1000
 | |
| 13	10000
 | |
| SELECT COUNT(c2) FROM t1 WHERE c1 > ((SELECT COUNT(*) FROM t1) / 2);
 | |
| COUNT(c2)
 | |
| 5
 | |
| SELECT COUNT(*) FROM t1 WHERE c1 > (SELECT AVG(c1) FROM t1);
 | |
| COUNT(*)
 | |
| 4
 | |
| ###############################################
 | |
| #
 | |
| # Try COUNT(*) on a DISCARDED table.
 | |
| #
 | |
| connection default;
 | |
| CREATE TABLE t4 LIKE t1;
 | |
| INSERT INTO t4 (SELECT * FROM t1);
 | |
| SELECT COUNT(*) FROM t4;
 | |
| COUNT(*)
 | |
| 9
 | |
| ALTER TABLE t4 DISCARD TABLESPACE;
 | |
| SELECT COUNT(*) FROM t4;
 | |
| ERROR HY000: Tablespace has been discarded for table `t4`
 | |
| #
 | |
| # Test the interaction of a repeatable read transaction
 | |
| # to changes that happen outside its view.
 | |
| #
 | |
| CREATE TABLE t5 (a INT AUTO_INCREMENT PRIMARY KEY, b TEXT, aa INT, bb TEXT) Engine=InnoDB;
 | |
| INSERT INTO t5(b) VALUES ("inserted by client 1");
 | |
| INSERT INTO t5(b) VALUES ("inserted by client 1");
 | |
| INSERT INTO t5(b) VALUES ("inserted by client 1");
 | |
| INSERT INTO t5(b) VALUES ("inserted by client 1");
 | |
| UPDATE t5 SET aa=a, bb=b;
 | |
| CREATE TABLE t6 (a INT AUTO_INCREMENT PRIMARY KEY, b TEXT, aa INT, bb TEXT) Engine=InnoDB;
 | |
| INSERT INTO t6(b) VALUES ("inserted by client 1");
 | |
| INSERT INTO t6(b) VALUES ("inserted by client 1");
 | |
| INSERT INTO t6(b) VALUES ("inserted by client 1");
 | |
| INSERT INTO t6(b) VALUES ("inserted by client 1");
 | |
| UPDATE t6 SET aa=a, bb=b;
 | |
| CREATE TABLE t7 (a INT AUTO_INCREMENT PRIMARY KEY, b TEXT, aa INT, bb TEXT) Engine=InnoDB;
 | |
| INSERT INTO t7(b) VALUES ("inserted by client 1");
 | |
| INSERT INTO t7(b) VALUES ("inserted by client 1");
 | |
| INSERT INTO t7(b) VALUES ("inserted by client 1");
 | |
| INSERT INTO t7(b) VALUES ("inserted by client 1");
 | |
| UPDATE t7 SET aa=a, bb=b;
 | |
| BEGIN;
 | |
| SELECT * FROM t5;
 | |
| a	b	aa	bb
 | |
| 1	inserted by client 1	1	inserted by client 1
 | |
| 2	inserted by client 1	2	inserted by client 1
 | |
| 3	inserted by client 1	3	inserted by client 1
 | |
| 4	inserted by client 1	4	inserted by client 1
 | |
| SELECT COUNT(*) FROM t5;
 | |
| COUNT(*)
 | |
| 4
 | |
| SELECT * FROM t6;
 | |
| a	b	aa	bb
 | |
| 1	inserted by client 1	1	inserted by client 1
 | |
| 2	inserted by client 1	2	inserted by client 1
 | |
| 3	inserted by client 1	3	inserted by client 1
 | |
| 4	inserted by client 1	4	inserted by client 1
 | |
| SELECT COUNT(*) FROM t6;
 | |
| COUNT(*)
 | |
| 4
 | |
| SELECT * FROM t7;
 | |
| a	b	aa	bb
 | |
| 1	inserted by client 1	1	inserted by client 1
 | |
| 2	inserted by client 1	2	inserted by client 1
 | |
| 3	inserted by client 1	3	inserted by client 1
 | |
| 4	inserted by client 1	4	inserted by client 1
 | |
| SELECT COUNT(*) FROM t7;
 | |
| COUNT(*)
 | |
| 4
 | |
| #
 | |
| # Connection 1
 | |
| #
 | |
| connection con1;
 | |
| INSERT INTO t5(b) VALUES ("inserted by client 2");
 | |
| UPDATE t5 SET a = 10 where a = 1;
 | |
| UPDATE t5 SET b = "updated by client 2" where a = 2;
 | |
| DELETE FROM t5 WHERE a = 3;
 | |
| SELECT * FROM t5;
 | |
| a	b	aa	bb
 | |
| 2	updated by client 2	2	inserted by client 1
 | |
| 4	inserted by client 1	4	inserted by client 1
 | |
| 5	inserted by client 2	NULL	NULL
 | |
| 10	inserted by client 1	1	inserted by client 1
 | |
| SELECT COUNT(*) FROM t5;
 | |
| COUNT(*)
 | |
| 4
 | |
| INSERT INTO t6(b) VALUES ("inserted by client 2");
 | |
| UPDATE t6 SET a = 10 where a = 1;
 | |
| UPDATE t6 SET b = "updated by client 2" where a = 2;
 | |
| DELETE FROM t6 WHERE a = 3;
 | |
| SELECT * FROM t6;
 | |
| a	b	aa	bb
 | |
| 2	updated by client 2	2	inserted by client 1
 | |
| 4	inserted by client 1	4	inserted by client 1
 | |
| 5	inserted by client 2	NULL	NULL
 | |
| 10	inserted by client 1	1	inserted by client 1
 | |
| SELECT COUNT(*) FROM t6;
 | |
| COUNT(*)
 | |
| 4
 | |
| INSERT INTO t7(b) VALUES ("inserted by client 2");
 | |
| UPDATE t7 SET a = 10 where a = 1;
 | |
| UPDATE t7 SET b = "updated by client 2" where a = 2;
 | |
| DELETE FROM t7 WHERE a = 3;
 | |
| SELECT * FROM t7;
 | |
| a	b	aa	bb
 | |
| 2	updated by client 2	2	inserted by client 1
 | |
| 4	inserted by client 1	4	inserted by client 1
 | |
| 5	inserted by client 2	NULL	NULL
 | |
| 10	inserted by client 1	1	inserted by client 1
 | |
| SELECT COUNT(*) FROM t7;
 | |
| COUNT(*)
 | |
| 4
 | |
| #
 | |
| # Connection default
 | |
| #
 | |
| connection default;
 | |
| SELECT * FROM t5;
 | |
| a	b	aa	bb
 | |
| 1	inserted by client 1	1	inserted by client 1
 | |
| 2	inserted by client 1	2	inserted by client 1
 | |
| 3	inserted by client 1	3	inserted by client 1
 | |
| 4	inserted by client 1	4	inserted by client 1
 | |
| INSERT INTO t5(b) VALUES ("inserted by client 1");
 | |
| SELECT * FROM t5;
 | |
| a	b	aa	bb
 | |
| 1	inserted by client 1	1	inserted by client 1
 | |
| 2	inserted by client 1	2	inserted by client 1
 | |
| 3	inserted by client 1	3	inserted by client 1
 | |
| 4	inserted by client 1	4	inserted by client 1
 | |
| 11	inserted by client 1	NULL	NULL
 | |
| UPDATE t5 SET a = a + 100;
 | |
| SELECT * FROM t5;
 | |
| a	b	aa	bb
 | |
| 1	inserted by client 1	1	inserted by client 1
 | |
| 3	inserted by client 1	3	inserted by client 1
 | |
| 102	updated by client 2	2	inserted by client 1
 | |
| 104	inserted by client 1	4	inserted by client 1
 | |
| 105	inserted by client 2	NULL	NULL
 | |
| 110	inserted by client 1	1	inserted by client 1
 | |
| 111	inserted by client 1	NULL	NULL
 | |
| SELECT COUNT(*) FROM t5;
 | |
| COUNT(*)
 | |
| 7
 | |
| UPDATE t6 SET b = "updated by client 2";
 | |
| SELECT * FROM t6;
 | |
| a	b	aa	bb
 | |
| 1	inserted by client 1	1	inserted by client 1
 | |
| 2	inserted by client 1	2	inserted by client 1
 | |
| 3	inserted by client 1	3	inserted by client 1
 | |
| 4	updated by client 2	4	inserted by client 1
 | |
| 5	updated by client 2	NULL	NULL
 | |
| 10	updated by client 2	1	inserted by client 1
 | |
| SELECT * FROM t6 LOCK IN SHARE MODE;
 | |
| a	b	aa	bb
 | |
| 2	updated by client 2	2	inserted by client 1
 | |
| 4	updated by client 2	4	inserted by client 1
 | |
| 5	updated by client 2	NULL	NULL
 | |
| 10	updated by client 2	1	inserted by client 1
 | |
| SELECT COUNT(*) FROM t6;
 | |
| COUNT(*)
 | |
| 6
 | |
| DELETE FROM t7;
 | |
| SELECT * FROM t7;
 | |
| a	b	aa	bb
 | |
| 1	inserted by client 1	1	inserted by client 1
 | |
| 3	inserted by client 1	3	inserted by client 1
 | |
| SELECT COUNT(*) FROM t7;
 | |
| COUNT(*)
 | |
| 2
 | |
| COMMIT;
 | |
| SELECT * FROM t5;
 | |
| a	b	aa	bb
 | |
| 102	updated by client 2	2	inserted by client 1
 | |
| 104	inserted by client 1	4	inserted by client 1
 | |
| 105	inserted by client 2	NULL	NULL
 | |
| 110	inserted by client 1	1	inserted by client 1
 | |
| 111	inserted by client 1	NULL	NULL
 | |
| SELECT COUNT(*) FROM t5;
 | |
| COUNT(*)
 | |
| 5
 | |
| SELECT * FROM t6;
 | |
| a	b	aa	bb
 | |
| 2	updated by client 2	2	inserted by client 1
 | |
| 4	updated by client 2	4	inserted by client 1
 | |
| 5	updated by client 2	NULL	NULL
 | |
| 10	updated by client 2	1	inserted by client 1
 | |
| SELECT COUNT(*) FROM t6;
 | |
| COUNT(*)
 | |
| 4
 | |
| SELECT * FROM t7;
 | |
| a	b	aa	bb
 | |
| SELECT COUNT(*) FROM t7;
 | |
| COUNT(*)
 | |
| 0
 | |
| #
 | |
| # Cleanup
 | |
| #
 | |
| DROP TABLE t1,t2,t4,t5,t6,t7;
 | |
| disconnect con1;
 | |
| disconnect con2;
 | |
| disconnect con3;
 | |
| #
 | |
| # Bug #23596760: FORCE INDEX IS SKIPPED WHILE EXECUTING SELECT COUNT(*)
 | |
| #
 | |
| CREATE TABLE t1(c1 INT NOT NULL PRIMARY KEY,
 | |
| c2 INT NOT NULL DEFAULT 1,
 | |
| c3 char(20) DEFAULT '',
 | |
| KEY c2_idx (c2)) ENGINE=InnoDB STATS_PERSISTENT=0;
 | |
| INSERT INTO t1(c1) VALUES (1), (2), (3);
 | |
| INSERT INTO t1(c1) SELECT c1 + 10 FROM t1;
 | |
| INSERT INTO t1(c1) SELECT c1 + 100 FROM t1;
 | |
| CREATE TABLE t2 STATS_PERSISTENT=0 SELECT * FROM t1;
 | |
| EXPLAIN SELECT COUNT(*) FROM t1;
 | |
| id	select_type	table	type	possible_keys	key	key_len	ref	rows	Extra
 | |
| 1	SIMPLE	t1	index	NULL	c2_idx	4	NULL	12	Using index
 | |
| EXPLAIN SELECT COUNT(*) FROM t1 FORCE INDEX(c2_idx);
 | |
| id	select_type	table	type	possible_keys	key	key_len	ref	rows	Extra
 | |
| 1	SIMPLE	t1	index	NULL	c2_idx	4	NULL	12	Using index
 | |
| EXPLAIN SELECT COUNT(*) FROM t1, t2;
 | |
| id	select_type	table	type	possible_keys	key	key_len	ref	rows	Extra
 | |
| 1	SIMPLE	t1	index	NULL	c2_idx	4	NULL	12	Using index
 | |
| 1	SIMPLE	t2	ALL	NULL	NULL	NULL	NULL	12	Using join buffer (flat, BNL join)
 | |
| EXPLAIN SELECT COUNT(*) FROM t1 FORCE INDEX(c2_idx), t2;
 | |
| id	select_type	table	type	possible_keys	key	key_len	ref	rows	Extra
 | |
| 1	SIMPLE	t1	index	NULL	c2_idx	4	NULL	12	Using index
 | |
| 1	SIMPLE	t2	ALL	NULL	NULL	NULL	NULL	12	Using join buffer (flat, BNL join)
 | |
| DROP TABLE t1, t2;
 |