innodb-lock.test
上传用户:romrleung
上传日期:2022-05-23
资源大小:18897k
文件大小:2k
源码类别:

MySQL数据库

开发平台:

Visual C++

  1. -- source include/have_innodb.inc
  2. # Can't test this with embedded server
  3. -- source include/not_embedded.inc
  4. #
  5. # Check and select innodb lock type
  6. #
  7. set global innodb_table_locks=1;
  8. select @@innodb_table_locks;
  9. #
  10. # Testing of explicit table locks with enforced table locks
  11. #
  12. connect (con1,localhost,root,,);
  13. connect (con2,localhost,root,,);
  14. --disable_warnings
  15. drop table if exists t1;
  16. --enable_warnings
  17. #
  18. # Testing of explicit table locks with enforced table locks
  19. #
  20. set @@innodb_table_locks=1;
  21. connection con1;
  22. create table t1 (id integer, x integer) engine=INNODB;
  23. insert into t1 values(0, 0);
  24. set autocommit=0;
  25. SELECT * from t1 where id = 0 FOR UPDATE;
  26. connection con2;
  27. set autocommit=0;
  28. # The following statement should hang because con1 is locking the page
  29. --send
  30. lock table t1 write;
  31. --sleep 2
  32. connection con1;
  33. update t1 set x=1 where id = 0;
  34. select * from t1;
  35. commit;
  36. connection con2;
  37. reap;
  38. update t1 set x=2 where id = 0;
  39. commit;
  40. unlock tables;
  41. connection con1;
  42. select * from t1;
  43. commit;
  44. drop table t1;
  45. #
  46. # Try with old lock method (where LOCK TABLE is ignored by InnoDB)
  47. #
  48. set @@innodb_table_locks=0;
  49. create table t1 (id integer primary key, x integer) engine=INNODB;
  50. insert into t1 values(0, 0),(1,1),(2,2);
  51. commit;
  52. SELECT * from t1 where id = 0 FOR UPDATE;
  53. connection con2;
  54. set autocommit=0;
  55. set @@innodb_table_locks=0;
  56. # The following statement should work becase innodb doesn't check table locks
  57. lock table t1 write;
  58. connection con1;
  59. # This will be locked by MySQL
  60. --send
  61. update t1 set x=10 where id = 2;
  62. --sleep 2
  63. connection con2;
  64. # Note that we will get a deadlock if we try to select any rows marked
  65. # for update by con1 !
  66. SELECT * from t1 where id = 2;
  67. UPDATE t1 set x=3 where id = 2;
  68. commit;
  69. SELECT * from t1;
  70. commit;
  71. unlock tables;
  72. connection con1;
  73. reap;
  74. commit;
  75. select * from t1;
  76. drop table t1;
  77. # End of 4.1 tests