1
SHOW TABLES FROM information_schema LIKE 'KEY_COLUMN_USAGE';
2
Tables_in_information_schema (KEY_COLUMN_USAGE)
4
#######################################################################
5
# Testcase 3.2.1.1: INFORMATION_SCHEMA tables can be queried via SELECT
6
#######################################################################
7
DROP VIEW IF EXISTS test.v1;
8
DROP PROCEDURE IF EXISTS test.p1;
9
DROP FUNCTION IF EXISTS test.f1;
10
CREATE VIEW test.v1 AS SELECT * FROM information_schema.KEY_COLUMN_USAGE;
11
CREATE PROCEDURE test.p1() SELECT * FROM information_schema.KEY_COLUMN_USAGE;
12
CREATE FUNCTION test.f1() returns BIGINT
14
DECLARE counter BIGINT DEFAULT NULL;
15
SELECT COUNT(*) INTO counter FROM information_schema.KEY_COLUMN_USAGE;
18
# Attention: The printing of the next result sets is disabled.
19
SELECT * FROM information_schema.KEY_COLUMN_USAGE;
20
SELECT * FROM test.v1;
24
DROP PROCEDURE test.p1;
25
DROP FUNCTION test.f1;
26
#########################################################################
27
# Testcase 3.2.7.1: INFORMATION_SCHEMA.KEY_COLUMN_USAGE layout
28
#########################################################################
29
DESCRIBE information_schema.KEY_COLUMN_USAGE;
30
Field Type Null Key Default Extra
31
CONSTRAINT_CATALOG varchar(512) YES NULL
32
CONSTRAINT_SCHEMA varchar(64) NO
33
CONSTRAINT_NAME varchar(64) NO
34
TABLE_CATALOG varchar(512) YES NULL
35
TABLE_SCHEMA varchar(64) NO
36
TABLE_NAME varchar(64) NO
37
COLUMN_NAME varchar(64) NO
38
ORDINAL_POSITION bigint(10) NO 0
39
POSITION_IN_UNIQUE_CONSTRAINT bigint(10) YES NULL
40
REFERENCED_TABLE_SCHEMA varchar(64) YES NULL
41
REFERENCED_TABLE_NAME varchar(64) YES NULL
42
REFERENCED_COLUMN_NAME varchar(64) YES NULL
43
SHOW CREATE TABLE information_schema.KEY_COLUMN_USAGE;
45
KEY_COLUMN_USAGE CREATE TEMPORARY TABLE `KEY_COLUMN_USAGE` (
46
`CONSTRAINT_CATALOG` varchar(512) DEFAULT NULL,
47
`CONSTRAINT_SCHEMA` varchar(64) NOT NULL DEFAULT '',
48
`CONSTRAINT_NAME` varchar(64) NOT NULL DEFAULT '',
49
`TABLE_CATALOG` varchar(512) DEFAULT NULL,
50
`TABLE_SCHEMA` varchar(64) NOT NULL DEFAULT '',
51
`TABLE_NAME` varchar(64) NOT NULL DEFAULT '',
52
`COLUMN_NAME` varchar(64) NOT NULL DEFAULT '',
53
`ORDINAL_POSITION` bigint(10) NOT NULL DEFAULT '0',
54
`POSITION_IN_UNIQUE_CONSTRAINT` bigint(10) DEFAULT NULL,
55
`REFERENCED_TABLE_SCHEMA` varchar(64) DEFAULT NULL,
56
`REFERENCED_TABLE_NAME` varchar(64) DEFAULT NULL,
57
`REFERENCED_COLUMN_NAME` varchar(64) DEFAULT NULL
58
) ENGINE=MEMORY DEFAULT CHARSET=utf8
59
SHOW COLUMNS FROM information_schema.KEY_COLUMN_USAGE;
60
Field Type Null Key Default Extra
61
CONSTRAINT_CATALOG varchar(512) YES NULL
62
CONSTRAINT_SCHEMA varchar(64) NO
63
CONSTRAINT_NAME varchar(64) NO
64
TABLE_CATALOG varchar(512) YES NULL
65
TABLE_SCHEMA varchar(64) NO
66
TABLE_NAME varchar(64) NO
67
COLUMN_NAME varchar(64) NO
68
ORDINAL_POSITION bigint(10) NO 0
69
POSITION_IN_UNIQUE_CONSTRAINT bigint(10) YES NULL
70
REFERENCED_TABLE_SCHEMA varchar(64) YES NULL
71
REFERENCED_TABLE_NAME varchar(64) YES NULL
72
REFERENCED_COLUMN_NAME varchar(64) YES NULL
73
SELECT constraint_catalog, constraint_schema, constraint_name, table_catalog,
74
table_schema, table_name, column_name
75
FROM information_schema.key_column_usage
76
WHERE constraint_catalog IS NOT NULL OR table_catalog IS NOT NULL;
77
constraint_catalog constraint_schema constraint_name table_catalog table_schema table_name column_name
78
########################################################################################
79
# Testcase 3.2.7.2 + 3.2.7.3: INFORMATION_SCHEMA.KEY_COLUMN_USAGE accessible information
80
########################################################################################
81
DROP DATABASE IF EXISTS db_datadict;
82
CREATE DATABASE db_datadict;
83
DROP USER 'testuser1'@'localhost';
84
CREATE USER 'testuser1'@'localhost';
85
DROP USER 'testuser2'@'localhost';
86
CREATE USER 'testuser2'@'localhost';
89
(f1 INT NOT NULL, PRIMARY KEY(f1),
90
f2 INT, INDEX f2_ind(f2))
91
ENGINE = <engine_type>;
92
GRANT SELECT ON t1_1 to 'testuser1'@'localhost';
94
(f1 INT NOT NULL, PRIMARY KEY(f1),
95
f2 INT, INDEX f2_ind(f2))
96
ENGINE = <engine_type>;
97
GRANT SELECT ON t1_2 to 'testuser2'@'localhost';
98
SELECT * FROM information_schema.key_column_usage
99
WHERE table_name LIKE 't1_%'
100
ORDER BY constraint_catalog, constraint_schema, constraint_name,
101
table_catalog, table_schema, table_name, ordinal_position;
102
CONSTRAINT_CATALOG CONSTRAINT_SCHEMA CONSTRAINT_NAME TABLE_CATALOG TABLE_SCHEMA TABLE_NAME COLUMN_NAME ORDINAL_POSITION POSITION_IN_UNIQUE_CONSTRAINT REFERENCED_TABLE_SCHEMA REFERENCED_TABLE_NAME REFERENCED_COLUMN_NAME
103
NULL db_datadict PRIMARY NULL db_datadict t1_1 f1 1 NULL NULL NULL NULL
104
NULL db_datadict PRIMARY NULL db_datadict t1_2 f1 1 NULL NULL NULL NULL
105
# Establish connection testuser1 (user=testuser1)
106
SELECT * FROM information_schema.key_column_usage
107
WHERE table_name LIKE 't1_%'
108
ORDER BY constraint_catalog, constraint_schema, constraint_name,
109
table_catalog, table_schema, table_name, ordinal_position;
110
CONSTRAINT_CATALOG CONSTRAINT_SCHEMA CONSTRAINT_NAME TABLE_CATALOG TABLE_SCHEMA TABLE_NAME COLUMN_NAME ORDINAL_POSITION POSITION_IN_UNIQUE_CONSTRAINT REFERENCED_TABLE_SCHEMA REFERENCED_TABLE_NAME REFERENCED_COLUMN_NAME
111
NULL db_datadict PRIMARY NULL db_datadict t1_1 f1 1 NULL NULL NULL NULL
112
NULL db_datadict PRIMARY NULL db_datadict t1_2 f1 1 NULL NULL NULL NULL
113
# Establish connection testuser2 (user=testuser2)
114
SELECT * FROM information_schema.key_column_usage
115
WHERE table_name LIKE 't1_%'
116
ORDER BY constraint_catalog, constraint_schema, constraint_name,
117
table_catalog, table_schema, table_name, ordinal_position;
118
CONSTRAINT_CATALOG CONSTRAINT_SCHEMA CONSTRAINT_NAME TABLE_CATALOG TABLE_SCHEMA TABLE_NAME COLUMN_NAME ORDINAL_POSITION POSITION_IN_UNIQUE_CONSTRAINT REFERENCED_TABLE_SCHEMA REFERENCED_TABLE_NAME REFERENCED_COLUMN_NAME
119
NULL db_datadict PRIMARY NULL db_datadict t1_1 f1 1 NULL NULL NULL NULL
120
NULL db_datadict PRIMARY NULL db_datadict t1_2 f1 1 NULL NULL NULL NULL
121
# Switch to connection default and close connections testuser1, testuser2
122
DROP USER 'testuser1'@'localhost';
123
DROP USER 'testuser2'@'localhost';
126
DROP DATABASE IF EXISTS db_datadict;
127
########################################################################################
128
# Testcase 3.2.1.13+3.2.1.14+3.2.1.15: INFORMATION_SCHEMA.KEY_COLUMN_USAGE modifications
129
########################################################################################
130
DROP DATABASE IF EXISTS db_datadict;
131
DROP TABLE IF EXISTS test.t1_my_table;
132
CREATE DATABASE db_datadict;
133
SELECT table_name FROM information_schema.key_column_usage
134
WHERE table_name LIKE 't1_my_table%';
136
CREATE TABLE test.t1_my_table
137
(f1 CHAR(12), f2 TIMESTAMP, f4 BIGINT, PRIMARY KEY(f1,f2))
138
DEFAULT CHARACTER SET latin1 COLLATE latin1_swedish_ci
139
ENGINE = <engine_type>;
140
SELECT * FROM information_schema.key_column_usage
141
WHERE table_name = 't1_my_table';
142
CONSTRAINT_CATALOG NULL
143
CONSTRAINT_SCHEMA test
144
CONSTRAINT_NAME PRIMARY
147
TABLE_NAME t1_my_table
150
POSITION_IN_UNIQUE_CONSTRAINT NULL
151
REFERENCED_TABLE_SCHEMA NULL
152
REFERENCED_TABLE_NAME NULL
153
REFERENCED_COLUMN_NAME NULL
154
CONSTRAINT_CATALOG NULL
155
CONSTRAINT_SCHEMA test
156
CONSTRAINT_NAME PRIMARY
159
TABLE_NAME t1_my_table
162
POSITION_IN_UNIQUE_CONSTRAINT NULL
163
REFERENCED_TABLE_SCHEMA NULL
164
REFERENCED_TABLE_NAME NULL
165
REFERENCED_COLUMN_NAME NULL
166
SELECT DISTINCT table_name FROM information_schema.key_column_usage
167
WHERE table_name LIKE 't1_my_table%';
170
RENAME TABLE test.t1_my_table TO test.t1_my_tablex;
171
SELECT DISTINCT table_name FROM information_schema.key_column_usage
172
WHERE table_name LIKE 't1_my_table%';
175
SELECT DISTINCT table_schema,table_name FROM information_schema.key_column_usage
176
WHERE table_name = 't1_my_tablex';
177
table_schema table_name
179
RENAME TABLE test.t1_my_tablex TO db_datadict.t1_my_tablex;
180
SELECT DISTINCT table_schema,table_name FROM information_schema.key_column_usage
181
WHERE table_name = 't1_my_tablex';
182
table_schema table_name
183
db_datadict t1_my_tablex
184
SELECT DISTINCT table_name, column_name FROM information_schema.key_column_usage
185
WHERE table_name = 't1_my_tablex'
186
ORDER BY table_name, column_name;
187
table_name column_name
190
ALTER TABLE db_datadict.t1_my_tablex CHANGE COLUMN f1 first_col CHAR(12);
191
SELECT DISTINCT table_name, column_name FROM information_schema.key_column_usage
192
WHERE table_name = 't1_my_tablex'
193
ORDER BY table_name, column_name;
194
table_name column_name
196
t1_my_tablex first_col
197
SELECT constraint_schema, constraint_name, table_schema,
198
table_name, column_name, ordinal_position
199
FROM information_schema.key_column_usage
200
WHERE table_name = 't1_my_tablex'
201
ORDER BY constraint_schema, constraint_name, table_schema,
202
table_name, ordinal_position;
203
constraint_schema constraint_name table_schema table_name column_name ordinal_position
204
db_datadict PRIMARY db_datadict t1_my_tablex first_col 1
205
db_datadict PRIMARY db_datadict t1_my_tablex f2 2
206
CREATE INDEX f2 ON db_datadict.t1_my_tablex(f2);
207
SELECT constraint_schema, constraint_name, table_schema,
208
table_name, column_name, ordinal_position
209
FROM information_schema.key_column_usage
210
WHERE table_name = 't1_my_tablex'
211
ORDER BY constraint_schema, constraint_name, table_schema,
212
table_name, ordinal_position;
213
constraint_schema constraint_name table_schema table_name column_name ordinal_position
214
db_datadict PRIMARY db_datadict t1_my_tablex first_col 1
215
db_datadict PRIMARY db_datadict t1_my_tablex f2 2
216
DROP INDEX f2 ON db_datadict.t1_my_tablex;
217
SELECT constraint_schema, constraint_name, table_schema,
218
table_name, column_name, ordinal_position
219
FROM information_schema.key_column_usage
220
WHERE table_name = 't1_my_tablex'
221
ORDER BY constraint_schema, constraint_name, table_schema,
222
table_name, ordinal_position;
223
constraint_schema constraint_name table_schema table_name column_name ordinal_position
224
db_datadict PRIMARY db_datadict t1_my_tablex first_col 1
225
db_datadict PRIMARY db_datadict t1_my_tablex f2 2
226
ALTER TABLE db_datadict.t1_my_tablex ADD UNIQUE (f2);
227
SELECT constraint_schema, constraint_name, table_schema,
228
table_name, column_name, ordinal_position
229
FROM information_schema.key_column_usage
230
WHERE table_name = 't1_my_tablex'
231
ORDER BY constraint_schema, constraint_name, table_schema,
232
table_name, ordinal_position;
233
constraint_schema constraint_name table_schema table_name column_name ordinal_position
234
db_datadict f2 db_datadict t1_my_tablex f2 1
235
db_datadict PRIMARY db_datadict t1_my_tablex first_col 1
236
db_datadict PRIMARY db_datadict t1_my_tablex f2 2
237
DROP INDEX f2 ON db_datadict.t1_my_tablex;
238
SELECT constraint_schema, constraint_name, table_schema,
239
table_name, column_name, ordinal_position
240
FROM information_schema.key_column_usage
241
WHERE table_name = 't1_my_tablex'
242
ORDER BY constraint_schema, constraint_name, table_schema,
243
table_name, ordinal_position;
244
constraint_schema constraint_name table_schema table_name column_name ordinal_position
245
db_datadict PRIMARY db_datadict t1_my_tablex first_col 1
246
db_datadict PRIMARY db_datadict t1_my_tablex f2 2
247
ALTER TABLE db_datadict.t1_my_tablex ADD UNIQUE my_idx (f2);
248
SELECT constraint_schema, constraint_name, table_schema,
249
table_name, column_name, ordinal_position
250
FROM information_schema.key_column_usage
251
WHERE table_name = 't1_my_tablex'
252
ORDER BY constraint_schema, constraint_name, table_schema,
253
table_name, ordinal_position;
254
constraint_schema constraint_name table_schema table_name column_name ordinal_position
255
db_datadict my_idx db_datadict t1_my_tablex f2 1
256
db_datadict PRIMARY db_datadict t1_my_tablex first_col 1
257
db_datadict PRIMARY db_datadict t1_my_tablex f2 2
258
DROP INDEX my_idx ON db_datadict.t1_my_tablex;
259
SELECT constraint_schema, constraint_name, table_schema,
260
table_name, column_name, ordinal_position
261
FROM information_schema.key_column_usage
262
WHERE table_name = 't1_my_tablex'
263
ORDER BY constraint_schema, constraint_name, table_schema,
264
table_name, ordinal_position;
265
constraint_schema constraint_name table_schema table_name column_name ordinal_position
266
db_datadict PRIMARY db_datadict t1_my_tablex first_col 1
267
db_datadict PRIMARY db_datadict t1_my_tablex f2 2
268
ALTER TABLE db_datadict.t1_my_tablex ADD UNIQUE my_idx (f4,first_col);
269
SELECT constraint_schema, constraint_name, table_schema,
270
table_name, column_name, ordinal_position
271
FROM information_schema.key_column_usage
272
WHERE table_name = 't1_my_tablex'
273
ORDER BY constraint_schema, constraint_name, table_schema,
274
table_name, ordinal_position;
275
constraint_schema constraint_name table_schema table_name column_name ordinal_position
276
db_datadict my_idx db_datadict t1_my_tablex f4 1
277
db_datadict my_idx db_datadict t1_my_tablex first_col 2
278
db_datadict PRIMARY db_datadict t1_my_tablex first_col 1
279
db_datadict PRIMARY db_datadict t1_my_tablex f2 2
280
SELECT constraint_schema, constraint_name, table_schema,
281
table_name, column_name, ordinal_position
282
FROM information_schema.key_column_usage
283
WHERE table_name = 't1_my_tablex'
284
ORDER BY constraint_schema, constraint_name, table_schema,
285
table_name, ordinal_position;
286
constraint_schema constraint_name table_schema table_name column_name ordinal_position
287
db_datadict my_idx db_datadict t1_my_tablex f4 1
288
db_datadict my_idx db_datadict t1_my_tablex first_col 2
289
db_datadict PRIMARY db_datadict t1_my_tablex first_col 1
290
db_datadict PRIMARY db_datadict t1_my_tablex f2 2
291
ALTER TABLE db_datadict.t1_my_tablex
292
DROP COLUMN first_col;
293
SELECT constraint_schema, constraint_name, table_schema,
294
table_name, column_name, ordinal_position
295
FROM information_schema.key_column_usage
296
WHERE table_name = 't1_my_tablex'
297
ORDER BY constraint_schema, constraint_name, table_schema,
298
table_name, ordinal_position;
299
constraint_schema constraint_name table_schema table_name column_name ordinal_position
300
db_datadict my_idx db_datadict t1_my_tablex f4 1
301
db_datadict PRIMARY db_datadict t1_my_tablex f2 1
302
SELECT table_name, column_name
303
FROM information_schema.key_column_usage
304
WHERE table_name = 't1_my_tablex'
305
ORDER BY table_name, column_name;
306
table_name column_name
309
DROP TABLE db_datadict.t1_my_tablex;
310
SELECT table_name, column_name
311
FROM information_schema.key_column_usage
312
WHERE table_name = 't1_my_tablex';
313
table_name column_name
314
SELECT table_name FROM information_schema.key_column_usage
315
WHERE table_name = 't1_my_tablex';
317
CREATE TABLE db_datadict.t1_my_tablex
318
ENGINE = <engine_type> AS
320
SELECT table_name FROM information_schema.key_column_usage
321
WHERE table_name = 't1_my_tablex';
323
ALTER TABLE db_datadict.t1_my_tablex ADD PRIMARY KEY(f1);
324
SELECT table_name FROM information_schema.key_column_usage
325
WHERE table_name = 't1_my_tablex';
328
SELECT table_name FROM information_schema.key_column_usage
329
WHERE table_name = 't1_my_tablex';
332
DROP DATABASE db_datadict;
333
SELECT table_name FROM information_schema.key_column_usage
334
WHERE table_name = 't1_my_tablex';
336
########################################################################
337
# Testcases 3.2.1.3-3.2.1.5 + 3.2.1.8-3.2.1.12: INSERT/UPDATE/DELETE and
338
# DDL on INFORMATION_SCHEMA table are not supported
339
########################################################################
340
DROP DATABASE IF EXISTS db_datadict;
341
DROP TABLE IF EXISTS db_datadict.t1;
342
CREATE DATABASE db_datadict;
343
CREATE TABLE db_datadict.t1 (f1 BIGINT)
344
ENGINE = <engine_type>;
345
INSERT INTO information_schema.key_column_usage
346
(constraint_schema, constraint_name, table_name)
347
VALUES ( 'mysql', 'primary', 'db');
348
ERROR 42000: Access denied for user 'root'@'localhost' to database 'information_schema'
349
INSERT INTO information_schema.key_column_usage
350
SELECT * FROM information_schema.key_column_usage;
351
ERROR 42000: Access denied for user 'root'@'localhost' to database 'information_schema'
352
UPDATE information_schema.key_column_usage
353
SET table_name = 'db1' WHERE constraint_name = 'primary';
354
ERROR 42000: Access denied for user 'root'@'localhost' to database 'information_schema'
355
DELETE FROM information_schema.key_column_usage WHERE table_name = 't1';
356
ERROR 42000: Access denied for user 'root'@'localhost' to database 'information_schema'
357
TRUNCATE information_schema.key_column_usage;
358
ERROR 42000: Access denied for user 'root'@'localhost' to database 'information_schema'
359
CREATE INDEX i3 ON information_schema.key_column_usage(table_name);
360
ERROR 42000: Access denied for user 'root'@'localhost' to database 'information_schema'
361
ALTER TABLE information_schema.key_column_usage ADD f1 INT;
362
ERROR 42000: Access denied for user 'root'@'localhost' to database 'information_schema'
363
DROP TABLE information_schema.key_column_usage;
364
ERROR 42000: Access denied for user 'root'@'localhost' to database 'information_schema'
365
ALTER TABLE information_schema.key_column_usage
366
RENAME db_datadict.key_column_usage;
367
ERROR 42000: Access denied for user 'root'@'localhost' to database 'information_schema'
368
ALTER TABLE information_schema.key_column_usage
369
RENAME information_schema.xkey_column_usage;
370
ERROR 42000: Access denied for user 'root'@'localhost' to database 'information_schema'
371
DROP TABLE db_datadict.t1;
372
DROP DATABASE db_datadict;