innodb-deadlock.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. connect (con1,localhost,root,,);
  5. connect (con2,localhost,root,,);
  6. --disable_warnings
  7. drop table if exists t1,t2;
  8. --enable_warnings
  9. #
  10. # Testing of FOR UPDATE
  11. #
  12. connection con1;
  13. create table t1 (id integer, x integer) engine=INNODB;
  14. insert into t1 values(0, 0);
  15. set autocommit=0;
  16. SELECT * from t1 where id = 0 FOR UPDATE;
  17. connection con2;
  18. set autocommit=0;
  19. # The following query should hang because con1 is locking the page
  20. --send
  21. update t1 set x=2 where id = 0;
  22. --sleep 2
  23. connection con1;
  24. update t1 set x=1 where id = 0;
  25. select * from t1;
  26. commit;
  27. connection con2;
  28. reap;
  29. commit;
  30. connection con1;
  31. select * from t1;
  32. commit;
  33. drop table t1;
  34. #
  35. # Testing of FOR UPDATE
  36. #
  37. connection con1;
  38. create table t1 (id integer, x integer) engine=INNODB;
  39. create table t2 (b integer, a integer) engine=INNODB;
  40. insert into t1 values(0, 0), (300, 300);
  41. insert into t2 values(0, 10), (1, 20), (2, 30);
  42. commit;
  43. set autocommit=0;
  44. select * from t2;
  45. update t2 set a=100 where b=(SELECT x from t1 where id = b FOR UPDATE);
  46. select * from t2;
  47. select * from t1;
  48. connection con2;
  49. set autocommit=0;
  50. # The following query should hang because con1 is locking the page
  51. --send
  52. update t1 set x=2 where id = 0;
  53. --sleep 2
  54. connection con1;
  55. update t1 set x=1 where id = 0;
  56. select * from t1;
  57. commit;
  58. connection con2;
  59. reap;
  60. commit;
  61. connection con1;
  62. select * from t1;
  63. commit;
  64. drop table t1, t2;
  65. create table t1 (id integer, x integer) engine=INNODB;
  66. create table t2 (b integer, a integer) engine=INNODB;
  67. insert into t1 values(0, 0), (300, 300);
  68. insert into t2 values(0, 0), (1, 20), (2, 30);
  69. commit;
  70. connection con1;
  71. select a,b from t2 UNION SELECT id, x from t1 FOR UPDATE;
  72. select * from t2;
  73. select * from t1;
  74. connection con2;
  75. # The following query should hang because con1 is locking the page
  76. update t2 set a=2 where b = 0;
  77. select * from t2;
  78. --send
  79. update t1 set x=2 where id = 0;
  80. --sleep 2
  81. connection con1;
  82. update t1 set x=1 where id = 0;
  83. select * from t1;
  84. commit;
  85. connection con2;
  86. reap;
  87. commit;
  88. connection con1;
  89. select * from t1;
  90. commit;
  91. drop table t1, t2;
  92. # End of 4.1 tests