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

MySQL数据库

开发平台:

Visual C++

  1. source include/master-slave.inc;
  2. ##############################################################################
  3. #
  4. # Let's verify that multi-update with a subselect does not cause the slave to crash
  5. # (BUG#10442)
  6. #
  7. --disable_query_log
  8. SELECT '-------- Test for BUG#9361 --------' as "";
  9. --enable_query_log
  10. CREATE TABLE t1 (
  11.  a int unsigned not null auto_increment primary key,
  12.  b int unsigned
  13. ) ENGINE=MyISAM;
  14. CREATE TABLE t2 (
  15.  a int unsigned not null auto_increment primary key,
  16.  b int unsigned
  17. ) ENGINE=MyISAM;
  18. INSERT INTO t1 VALUES (NULL, 0);
  19. INSERT INTO t1 SELECT NULL, 0 FROM t1;
  20. INSERT INTO t2 VALUES (NULL, 0), (NULL,1);
  21. SELECT * FROM t1 ORDER BY a;
  22. SELECT * FROM t2 ORDER BY a;
  23. UPDATE t2, (SELECT a FROM t1) AS t SET t2.b = t.a+5 ;
  24. SELECT * FROM t1 ORDER BY a;
  25. SELECT * FROM t2 ORDER BY a;
  26. sync_slave_with_master;
  27. connection slave;
  28. SELECT * FROM t1 ORDER BY a;
  29. SELECT * FROM t2 ORDER BY a;
  30. connection master;
  31. drop table t1,t2;
  32. ##############################################################################
  33. #
  34. #  Test for BUG#9361: 
  35. #  Subselects should work inside multi-updates
  36. #
  37. --disable_query_log
  38. SELECT '-------- Test 1 for BUG#9361 --------' as "";
  39. --enable_query_log
  40. connection master;
  41. --disable_warnings
  42. DROP TABLE IF EXISTS t1;
  43. DROP TABLE IF EXISTS t2;
  44. --enable_warnings
  45. CREATE TABLE t1 (
  46.   a1  char(30),
  47.   a2  int,
  48.   a3  int,
  49.   a4  char(30),
  50.   a5  char(30)
  51. );
  52. CREATE TABLE t2 (
  53.   b1  int,
  54.   b2  char(30)
  55. );
  56. # Insert one row per table
  57. INSERT INTO t1 VALUES ('Yes', 1, NULL, 'foo', 'bar');
  58. INSERT INTO t2 VALUES (1, 'baz');
  59. # This should update the row in t1
  60. UPDATE t1 a, t2 
  61.   SET    a.a1 = 'No' 
  62.   WHERE  a.a2 = 
  63.     (SELECT  b1 
  64.      FROM    t2 
  65.      WHERE   b2 = 'baz') 
  66.   AND a.a3 IS NULL 
  67.   AND a.a4 = 'foo' 
  68.   AND a.a5 = 'bar';
  69. sync_slave_with_master;
  70. connection slave;
  71. SELECT * FROM t1;
  72. SELECT * FROM t2;
  73. connection master;
  74. DROP TABLE t1, t2;
  75. ##############################################################################
  76. #
  77. # Second test for BUG#9361
  78. #
  79. --disable_query_log
  80. SELECT '-------- Test 2 for BUG#9361 --------' as "";
  81. --enable_query_log
  82. connection master;
  83. --disable_warnings
  84. DROP TABLE IF EXISTS t1;
  85. DROP TABLE IF EXISTS t2;
  86. DROP TABLE IF EXISTS t3;
  87. --enable_warnings
  88. CREATE TABLE t1 (
  89.   i   INT,
  90.   j   INT,
  91.   x   INT,
  92.   y   INT,
  93.   z   INT
  94. );
  95. CREATE TABLE t2 (
  96.   i   INT,
  97.   k   INT,
  98.   x   INT,
  99.   y   INT,
  100.   z   INT
  101. );
  102. CREATE TABLE t3 (
  103.   j   INT,
  104.   k   INT,
  105.   x   INT,
  106.   y   INT,
  107.   z   INT
  108. );
  109. INSERT INTO t1 VALUES ( 1, 2,13,14,15);
  110. INSERT INTO t2 VALUES ( 1, 3,23,24,25);
  111. INSERT INTO t3 VALUES ( 2, 3, 1,34,35), ( 2, 3, 1,34,36);
  112. UPDATE      t1 AS a  
  113. INNER JOIN  t2 AS b 
  114.               ON a.i = b.i
  115. INNER JOIN  t3 AS c 
  116.               ON a.j = c.j  AND  b.k = c.k
  117. SET         a.x = b.x, 
  118.             a.y = b.y, 
  119.             a.z = (
  120.               SELECT  sum(z) 
  121.               FROM    t3
  122.               WHERE   y = 34 
  123.             ) 
  124. WHERE       b.x = 23;
  125. sync_slave_with_master;
  126. connection slave;
  127. SELECT * FROM t1;
  128. connection master;
  129. DROP TABLE t1, t2, t3;
  130. ##############################################################################
  131. #
  132. # BUG#12618
  133. #
  134. # TEST: Replication of a statement containing a join in a multi-update.
  135. DROP TABLE IF EXISTS t1;
  136. DROP TABLE IF EXISTS t2;
  137. CREATE TABLE t1 (
  138.   idp int(11) NOT NULL default '0',
  139.   idpro int(11) default NULL,
  140.   price decimal(19,4) default NULL,
  141.   PRIMARY KEY (idp)
  142. );
  143. CREATE TABLE t2 (
  144.   idpro int(11) NOT NULL default '0',
  145.   price decimal(19,4) default NULL,
  146.   nbprice int(11) default NULL,
  147.   PRIMARY KEY (idpro)
  148. );
  149. INSERT INTO t1 VALUES 
  150.   (1,1,'3.0000'),
  151.   (2,2,'1.0000'),
  152.   (3,1,'1.0000'),
  153.   (4,1,'4.0000'),
  154.   (5,3,'2.0000'),
  155.   (6,2,'4.0000');
  156. INSERT INTO t2 VALUES 
  157.   (1,'0.0000',0),
  158.   (2,'0.0000',0),
  159.   (3,'0.0000',0);
  160. # This update sets t2 to the minimal prices for each product
  161. update 
  162.   t2
  163.     join 
  164.   ( select    idpro, min(price) as min_price, count(*) as nbr_price
  165.     from      t1 
  166.     where     idpro>0 and price>0 
  167.     group by  idpro
  168.   ) as table_price
  169. on   t2.idpro = table_price.idpro 
  170. set  t2.price = table_price.min_price, 
  171.      t2.nbprice = table_price.nbr_price;
  172. select "-- MASTER AFTER JOIN --" as "";
  173. select * from t1;
  174. select * from t2;
  175. sync_slave_with_master;
  176. select "-- SLAVE AFTER JOIN --" as "";
  177. select * from t1;
  178. select * from t2;
  179. # End of 4.1 tests