📄 innodb-lock.test
字号:
-- 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_warningsdrop 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--sendlock table t1 write;--sleep 2connection 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 lockslock table t1 write;connection con1;# This will be locked by MySQL--sendupdate t1 set x=10 where id = 2;--sleep 2connection 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
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -