innodb-lock.test
上传用户:romrleung
上传日期:2022-05-23
资源大小:18897k
文件大小:2k
- -- 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