mirror of
				https://github.com/MariaDB/server.git
				synced 2025-10-25 18:38:00 +03:00 
			
		
		
		
	
		
			
				
	
	
		
			105 lines
		
	
	
		
			1.8 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
			
		
		
	
	
			105 lines
		
	
	
		
			1.8 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
| -- source include/have_innodb.inc
 | |
| # Can't test this with embedded server
 | |
| -- source include/not_embedded.inc
 | |
| 
 | |
| #
 | |
| # Check and select innodb lock type
 | |
| #
 | |
| 
 | |
| set global innodb_table_locks=1;
 | |
| 
 | |
| select @@innodb_table_locks;
 | |
| 
 | |
| #
 | |
| # Testing of explicit table locks with enforced table locks
 | |
| #
 | |
| 
 | |
| connect (con1,localhost,root,,);
 | |
| connect (con2,localhost,root,,);
 | |
| 
 | |
| --disable_warnings
 | |
| drop table if exists t1;
 | |
| --enable_warnings
 | |
| 
 | |
| #
 | |
| # Testing of explicit table locks with enforced table locks
 | |
| #
 | |
| 
 | |
| set @@innodb_table_locks=1;
 | |
| 
 | |
| connection con1;
 | |
| create table t1 (id integer, x integer) engine=INNODB;
 | |
| insert into t1 values(0, 0);
 | |
| set autocommit=0;
 | |
| SELECT * from t1 where id = 0 FOR UPDATE;
 | |
| 
 | |
| connection con2;
 | |
| set autocommit=0;
 | |
| 
 | |
| # The following statement should hang because con1 is locking the page
 | |
| --send
 | |
| lock table t1 write;
 | |
| --sleep 2
 | |
| 
 | |
| connection con1;
 | |
| update t1 set x=1 where id = 0;
 | |
| select * from t1;
 | |
| commit;
 | |
| 
 | |
| connection con2;
 | |
| reap;
 | |
| update t1 set x=2 where id = 0;
 | |
| commit;
 | |
| unlock tables;
 | |
| 
 | |
| connection con1;
 | |
| select * from t1;
 | |
| commit;
 | |
| 
 | |
| drop table t1;
 | |
| 
 | |
| #
 | |
| # Try with old lock method (where LOCK TABLE is ignored by InnoDB)
 | |
| #
 | |
| 
 | |
| set @@innodb_table_locks=0;
 | |
| 
 | |
| create table t1 (id integer primary key, x integer) engine=INNODB;
 | |
| insert into t1 values(0, 0),(1,1),(2,2);
 | |
| commit;
 | |
| SELECT * from t1 where id = 0 FOR UPDATE;
 | |
| 
 | |
| connection con2;
 | |
| set autocommit=0;
 | |
| set @@innodb_table_locks=0;
 | |
| 
 | |
| # The following statement should work becase innodb doesn't check table locks
 | |
| lock table t1 write;
 | |
| 
 | |
| connection con1;
 | |
| 
 | |
| # This will be locked by MySQL
 | |
| --send
 | |
| update t1 set x=10 where id = 2;
 | |
| --sleep 2
 | |
| 
 | |
| connection con2;
 | |
| 
 | |
| # Note that we will get a deadlock if we try to select any rows marked
 | |
| # for update by con1 !
 | |
| 
 | |
| SELECT * from t1 where id = 2;
 | |
| UPDATE t1 set x=3 where id = 2;
 | |
| commit;
 | |
| SELECT * from t1;
 | |
| commit;
 | |
| unlock tables;
 | |
| 
 | |
| connection con1;
 | |
| reap;
 | |
| commit;
 | |
| select * from t1;
 | |
| drop table t1;
 | |
| 
 | |
| # End of 4.1 tests
 | 
