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

MySQL数据库

开发平台:

Visual C++

  1. -- source include/have_ndb.inc
  2. -- source include/not_embedded.inc
  3. --disable_warnings
  4. drop table if exists t1, t2, t3, t4, t5, t6, t7;
  5. --enable_warnings
  6. #
  7. # Simple test to show use of UNIQUE indexes 
  8. #
  9. CREATE TABLE t1 (
  10.   a int unsigned NOT NULL PRIMARY KEY,
  11.   b int unsigned not null,
  12.   c int unsigned,
  13.   UNIQUE(b)
  14. ) engine=ndbcluster;
  15. insert t1 values(1, 2, 3), (2, 3, 5), (3, 4, 6), (4, 5, 8), (5,6, 2), (6,7, 2);
  16. select * from t1 order by b;
  17. select * from t1 where b = 4 order by b;
  18. insert into t1 values(7,8,3);
  19. select * from t1 where b = 4 order by a;
  20. -- error 1062
  21. insert into t1 values(8, 2, 3);
  22. select * from t1 order by a;
  23. delete from t1 where a = 1;
  24. insert into t1 values(8, 2, 3);
  25. select * from t1 order by a;
  26. drop table t1;
  27. #
  28. # Indexing NULL values
  29. #
  30. CREATE TABLE t1 (
  31.   a int unsigned NOT NULL PRIMARY KEY,
  32.   b int unsigned,
  33.   c int unsigned,
  34.   UNIQUE bc(b,c)
  35. ) engine = ndb;
  36. insert into t1 values(1,1,1),(2,NULL,2),(3,NULL,NULL),(4,4,NULL);
  37. select * from t1 use index (bc) where b IS NULL order by a;
  38. select * from t1 use index (bc)order by a;
  39. select * from t1 use index (bc) order by a;
  40. select * from t1 use index (PRIMARY) where b IS NULL order by a;
  41. select * from t1 use index (bc) where b IS NULL order by a;
  42. select * from t1 use index (bc) where b IS NULL and c IS NULL order by a;
  43. select * from t1 use index (bc) where b IS NULL and c = 2 order by a;
  44. select * from t1 use index (bc) where b < 4 order by a;
  45. select * from t1 use index (bc) where b IS NOT NULL order by a;
  46. -- error 1062
  47. insert into t1 values(5,1,1);
  48. drop table t1;
  49. #
  50. # Show use of UNIQUE USING HASH indexes 
  51. #
  52. CREATE TABLE t2 (
  53.   a int unsigned NOT NULL PRIMARY KEY,
  54.   b int unsigned not null,
  55.   c int unsigned not null,
  56.   UNIQUE USING HASH (b, c)
  57. ) engine=ndbcluster;
  58. insert t2 values(1, 2, 3), (2, 3, 5), (3, 4, 6), (4, 5, 8), (5,6, 2), (6,7, 2);
  59. select * from t2 where a = 3;
  60. select * from t2 where b = 4;
  61. select * from t2 where c = 6;
  62. insert into t2 values(7,8,3);
  63. select * from t2 where b = 4 order by a;
  64. -- error 1062
  65. insert into t2 values(8, 2, 3);
  66. select * from t2 order by a;
  67. delete from t2 where a = 1;
  68. insert into t2 values(8, 2, 3);
  69. select * from t2 order by a;
  70. drop table t2;
  71. -- error 1121
  72. CREATE TABLE t2 (
  73.   a int unsigned NOT NULL PRIMARY KEY,
  74.   b int unsigned not null,
  75.   c int unsigned,
  76.   UNIQUE USING HASH (b, c)
  77. ) engine=ndbcluster;
  78. #
  79. # Show use of PRIMARY KEY USING HASH indexes 
  80. #
  81. CREATE TABLE t3 (
  82.   a int unsigned NOT NULL,
  83.   b int unsigned not null,
  84.   c int unsigned,
  85.   PRIMARY KEY USING HASH (a, b)
  86. ) engine=ndbcluster;
  87. insert t3 values(1, 2, 3), (2, 3, 5), (3, 4, 6), (4, 5, 8), (5,6, 2), (6,7, 2);
  88. select * from t3 where a = 3;
  89. select * from t3 where b = 4;
  90. select * from t3 where c = 6;
  91. insert into t3 values(7,8,3);
  92. select * from t3 where b = 4 order by a;
  93. drop table t3;
  94. #
  95. # Indexes on NULL-able columns 
  96. #
  97. CREATE TABLE t1 (
  98.   pk int NOT NULL PRIMARY KEY,
  99.   a int unsigned,
  100.   UNIQUE KEY (a)
  101. ) engine=ndbcluster;
  102.  
  103. insert into t1 values (-1,NULL), (0,0), (1,NULL),(2,2),(3,NULL),(4,4);
  104. select * from t1 order by pk;
  105. --error 1062
  106. insert into t1 values (5,0);
  107. select * from t1 order by pk;
  108. delete from t1 where a = 0;
  109. insert into t1 values (5,0);
  110. select * from t1 order by pk;
  111. CREATE TABLE t2 (
  112.   pk int NOT NULL PRIMARY KEY,
  113.   a int unsigned,
  114.   b tinyint NOT NULL,
  115.   c VARCHAR(10),
  116.   UNIQUE KEY si(a, c)
  117. ) engine=ndbcluster;
  118. insert into t2 values (-1,1,17,NULL),(0,NULL,18,NULL),(1,3,19,'abc');
  119. select * from t2 order by pk;
  120. --error 1062
  121. insert into t2 values(2,3,19,'abc');
  122. select * from t2 order by pk;
  123. delete from t2 where c IS NOT NULL;
  124. insert into t2 values(2,3,19,'abc');
  125. select * from t2 order by pk;
  126.  
  127. drop table t1, t2;
  128. #
  129. # More complex tables
  130. #
  131. CREATE TABLE t1 (
  132.   cid smallint(5) unsigned NOT NULL default '0',
  133.   cv varchar(250) NOT NULL default '',
  134.   PRIMARY KEY  (cid),
  135.   UNIQUE KEY cv (cv)
  136. ) engine=ndbcluster;
  137. INSERT INTO t1 VALUES (8,'dummy');
  138. CREATE TABLE t2 (
  139.   cid bigint(20) unsigned NOT NULL auto_increment,
  140.   cap varchar(255) NOT NULL default '',
  141.   PRIMARY KEY  (cid),
  142.   UNIQUE KEY (cid, cap)
  143. ) engine=ndbcluster;
  144. INSERT INTO t2 VALUES (NULL,'another dummy');
  145. CREATE TABLE t3 (
  146.   gid bigint(20) unsigned NOT NULL auto_increment,
  147.   gn varchar(255) NOT NULL default '',
  148.   must tinyint(4) default NULL,
  149.   PRIMARY KEY  (gid)
  150. ) engine=ndbcluster;
  151. INSERT INTO t3 VALUES (1,'V1',NULL);
  152. CREATE TABLE t4 (
  153.   uid bigint(20) unsigned NOT NULL default '0',
  154.   gid bigint(20) unsigned NOT NULL,
  155.   rid bigint(20) unsigned NOT NULL default '-1',
  156.   cid bigint(20) unsigned NOT NULL default '-1',
  157.   UNIQUE KEY m (uid,gid,rid,cid)
  158. ) engine=ndbcluster;
  159. INSERT INTO t4 VALUES (1,1,2,4);
  160. INSERT INTO t4 VALUES (1,1,2,3);
  161. INSERT INTO t4 VALUES (1,1,5,7);
  162. INSERT INTO t4 VALUES (1,1,10,8);
  163. CREATE TABLE t5 (
  164.   rid bigint(20) unsigned NOT NULL auto_increment,
  165.   rl varchar(255) NOT NULL default '',
  166.   PRIMARY KEY  (rid)
  167. ) engine=ndbcluster;
  168. CREATE TABLE t6 (
  169.   uid bigint(20) unsigned NOT NULL auto_increment,
  170.   un varchar(250) NOT NULL default '',
  171.   uc smallint(5) unsigned NOT NULL default '0',
  172.   PRIMARY KEY  (uid),
  173.   UNIQUE KEY nc (un,uc)
  174. ) engine=ndbcluster;
  175. INSERT INTO t6 VALUES (1,'test',8);
  176. INSERT INTO t6 VALUES (2,'test2',9);
  177. INSERT INTO t6 VALUES (3,'tre',3);
  178. CREATE TABLE t7 (
  179.   mid bigint(20) unsigned NOT NULL PRIMARY KEY,
  180.   uid bigint(20) unsigned NOT NULL default '0',
  181.   gid bigint(20) unsigned NOT NULL,
  182.   rid bigint(20) unsigned NOT NULL default '-1',
  183.   cid bigint(20) unsigned NOT NULL default '-1',
  184.   UNIQUE KEY m (uid,gid,rid,cid)
  185. ) engine=ndbcluster;
  186. INSERT INTO t7 VALUES(1, 1, 1, 1, 1);
  187. INSERT INTO t7 VALUES(2, 2, 1, 1, 1);
  188. INSERT INTO t7 VALUES(3, 3, 1, 1, 1);
  189. INSERT INTO t7 VALUES(4, 4, 1, 1, 1);
  190. INSERT INTO t7 VALUES(5, 5, 1, 1, 1);
  191. INSERT INTO t7 VALUES(6, 1, 1, 1, 6);
  192. INSERT INTO t7 VALUES(7, 2, 1, 1, 7);
  193. INSERT INTO t7 VALUES(8, 3, 1, 1, 8);
  194. INSERT INTO t7 VALUES(9, 4, 1, 1, 9);
  195. INSERT INTO t7 VALUES(10, 5, 1, 1, 10);
  196. select * from t1 where cv = 'dummy';
  197. select * from t1 where cv = 'test';
  198. select * from t2 where cap = 'another dummy';
  199. select * from t4 where uid = 1 and gid=1 and rid=2 and cid=4;
  200. select * from t4 where uid = 1 and gid=1 and rid=1 and cid=4;
  201. select * from t4 where uid = 1 order by cid;
  202. select * from t4 where rid = 2 order by cid;
  203. select * from t6 where un='test' and uc=8;
  204. select * from t6 where un='test' and uc=7;
  205. select * from t6 where un='test';
  206. select * from t7 where mid = 8; 
  207. select * from t7 where uid = 8; 
  208. select * from t7 where uid = 1 order by mid; 
  209. select * from t7 where uid = 4 order by mid; 
  210. select * from t7 where gid = 4; 
  211. select * from t7 where gid = 1 order by mid; 
  212. select * from t7 where cid = 4; 
  213. select * from t7 where cid = 8; 
  214. #
  215. # insert more records into t4
  216. #
  217. let $1=100;
  218. disable_query_log;
  219. while ($1)
  220. {
  221.  eval insert into t4 values(1, $1, 5, 12);
  222.  eval insert into t4 values($1, 3, 9, 11);
  223.  dec $1;
  224. }
  225. enable_query_log;
  226. select * from t4 where uid = 1 and gid=1 and rid=2 and cid=4;
  227. select * from t4 where uid = 1 and gid=1 and rid=1 and cid=4;
  228. select * from t4 where uid = 1 order by gid,cid;
  229. select * from t4 where uid = 1 order by gid,cid;
  230. select * from t4 where rid = 2 order by cid;
  231. drop table t1,t2,t3,t4,t5,t6,t7;
  232. # test null in indexes
  233. CREATE TABLE t1 (   
  234.    a int unsigned NOT NULL PRIMARY KEY,
  235.    b int unsigned,   
  236.    c int unsigned, 
  237.    UNIQUE bc(b,c) ) engine = ndb;
  238.  
  239. insert into t1 values(1,1,1),(2,NULL,2),(3,NULL,NULL),(4,4,NULL);
  240. select * from t1 where b=1 and c=1;
  241. select * from t1 where b is null and c is null;
  242. select * from t1 where b is null and c = 2;
  243. select * from t1 where b = 4 and c is null;
  244. create table t8 as 
  245. select * from t1 where (b = 1 and c = 1)
  246.                     or (b is null and c is null) 
  247.                     or (b is null and c = 2)
  248.                     or (b = 4 and c is null);
  249. select * from t8 order by a;
  250. select * from t1 order by a;
  251. drop table t1, t8;
  252. ###############################
  253. # Bug 8101
  254. #
  255. # Unique index not specified in the same order as in table
  256. #
  257. create table t1(
  258.         id integer not null auto_increment,
  259.         month integer not null,
  260.         year integer not null,
  261.         code varchar( 2) not null,
  262.         primary key ( id),
  263. unique idx_t1( month, code, year)
  264. ) engine=ndb;
  265. INSERT INTO t1 (month, year, code) VALUES (4,2004,'12');
  266. INSERT INTO t1 (month, year, code) VALUES (5,2004,'12');
  267. select * from t1 where code = '12' and month = 4 and year = 2004 ;
  268. drop table t1;
  269. # End of 4.1 tests