SHOW TABLES FROM information_schema LIKE 'KEY_COLUMN_USAGE'; Tables_in_information_schema (KEY_COLUMN_USAGE) KEY_COLUMN_USAGE ####################################################################### # Testcase 3.2.1.1: INFORMATION_SCHEMA tables can be queried via SELECT ####################################################################### DROP VIEW IF EXISTS test.v1; DROP PROCEDURE IF EXISTS test.p1; DROP FUNCTION IF EXISTS test.f1; CREATE VIEW test.v1 AS SELECT * FROM information_schema.KEY_COLUMN_USAGE; CREATE PROCEDURE test.p1() SELECT * FROM information_schema.KEY_COLUMN_USAGE; CREATE FUNCTION test.f1() returns BIGINT BEGIN DECLARE counter BIGINT DEFAULT NULL; SELECT COUNT(*) INTO counter FROM information_schema.KEY_COLUMN_USAGE; RETURN counter; END// # Attention: The printing of the next result sets is disabled. SELECT * FROM information_schema.KEY_COLUMN_USAGE; SELECT * FROM test.v1; CALL test.p1; SELECT test.f1(); DROP VIEW test.v1; DROP PROCEDURE test.p1; DROP FUNCTION test.f1; ######################################################################### # Testcase 3.2.7.1: INFORMATION_SCHEMA.KEY_COLUMN_USAGE layout ######################################################################### DESCRIBE information_schema.KEY_COLUMN_USAGE; Field Type Null Key Default Extra CONSTRAINT_CATALOG varchar(512) YES NULL CONSTRAINT_SCHEMA varchar(64) NO CONSTRAINT_NAME varchar(64) NO TABLE_CATALOG varchar(512) YES NULL TABLE_SCHEMA varchar(64) NO TABLE_NAME varchar(64) NO COLUMN_NAME varchar(64) NO ORDINAL_POSITION bigint(10) NO 0 POSITION_IN_UNIQUE_CONSTRAINT bigint(10) YES NULL REFERENCED_TABLE_SCHEMA varchar(64) YES NULL REFERENCED_TABLE_NAME varchar(64) YES NULL REFERENCED_COLUMN_NAME varchar(64) YES NULL SHOW CREATE TABLE information_schema.KEY_COLUMN_USAGE; Table Create Table KEY_COLUMN_USAGE CREATE TEMPORARY TABLE `KEY_COLUMN_USAGE` ( `CONSTRAINT_CATALOG` varchar(512) DEFAULT NULL, `CONSTRAINT_SCHEMA` varchar(64) NOT NULL DEFAULT '', `CONSTRAINT_NAME` varchar(64) NOT NULL DEFAULT '', `TABLE_CATALOG` varchar(512) DEFAULT NULL, `TABLE_SCHEMA` varchar(64) NOT NULL DEFAULT '', `TABLE_NAME` varchar(64) NOT NULL DEFAULT '', `COLUMN_NAME` varchar(64) NOT NULL DEFAULT '', `ORDINAL_POSITION` bigint(10) NOT NULL DEFAULT '0', `POSITION_IN_UNIQUE_CONSTRAINT` bigint(10) DEFAULT NULL, `REFERENCED_TABLE_SCHEMA` varchar(64) DEFAULT NULL, `REFERENCED_TABLE_NAME` varchar(64) DEFAULT NULL, `REFERENCED_COLUMN_NAME` varchar(64) DEFAULT NULL ) ENGINE=MEMORY DEFAULT CHARSET=utf8 SHOW COLUMNS FROM information_schema.KEY_COLUMN_USAGE; Field Type Null Key Default Extra CONSTRAINT_CATALOG varchar(512) YES NULL CONSTRAINT_SCHEMA varchar(64) NO CONSTRAINT_NAME varchar(64) NO TABLE_CATALOG varchar(512) YES NULL TABLE_SCHEMA varchar(64) NO TABLE_NAME varchar(64) NO COLUMN_NAME varchar(64) NO ORDINAL_POSITION bigint(10) NO 0 POSITION_IN_UNIQUE_CONSTRAINT bigint(10) YES NULL REFERENCED_TABLE_SCHEMA varchar(64) YES NULL REFERENCED_TABLE_NAME varchar(64) YES NULL REFERENCED_COLUMN_NAME varchar(64) YES NULL SELECT constraint_catalog, constraint_schema, constraint_name, table_catalog, table_schema, table_name, column_name FROM information_schema.key_column_usage WHERE constraint_catalog IS NOT NULL OR table_catalog IS NOT NULL; constraint_catalog constraint_schema constraint_name table_catalog table_schema table_name column_name ######################################################################################## # Testcase 3.2.7.2 + 3.2.7.3: INFORMATION_SCHEMA.KEY_COLUMN_USAGE accessible information ######################################################################################## DROP DATABASE IF EXISTS db_datadict; CREATE DATABASE db_datadict; DROP USER 'testuser1'@'localhost'; CREATE USER 'testuser1'@'localhost'; DROP USER 'testuser2'@'localhost'; CREATE USER 'testuser2'@'localhost'; USE db_datadict; CREATE TABLE t1_1 (f1 INT NOT NULL, PRIMARY KEY(f1), f2 INT, INDEX f2_ind(f2)) ENGINE = ; GRANT SELECT ON t1_1 to 'testuser1'@'localhost'; CREATE TABLE t1_2 (f1 INT NOT NULL, PRIMARY KEY(f1), f2 INT, INDEX f2_ind(f2)) ENGINE = ; GRANT SELECT ON t1_2 to 'testuser2'@'localhost'; SELECT * FROM information_schema.key_column_usage WHERE table_name LIKE 't1_%' ORDER BY constraint_catalog, constraint_schema, constraint_name, table_catalog, table_schema, table_name, ordinal_position; 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 NULL db_datadict PRIMARY NULL db_datadict t1_1 f1 1 NULL NULL NULL NULL NULL db_datadict PRIMARY NULL db_datadict t1_2 f1 1 NULL NULL NULL NULL # Establish connection testuser1 (user=testuser1) SELECT * FROM information_schema.key_column_usage WHERE table_name LIKE 't1_%' ORDER BY constraint_catalog, constraint_schema, constraint_name, table_catalog, table_schema, table_name, ordinal_position; 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 NULL db_datadict PRIMARY NULL db_datadict t1_1 f1 1 NULL NULL NULL NULL NULL db_datadict PRIMARY NULL db_datadict t1_2 f1 1 NULL NULL NULL NULL # Establish connection testuser2 (user=testuser2) SELECT * FROM information_schema.key_column_usage WHERE table_name LIKE 't1_%' ORDER BY constraint_catalog, constraint_schema, constraint_name, table_catalog, table_schema, table_name, ordinal_position; 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 NULL db_datadict PRIMARY NULL db_datadict t1_1 f1 1 NULL NULL NULL NULL NULL db_datadict PRIMARY NULL db_datadict t1_2 f1 1 NULL NULL NULL NULL # Switch to connection default and close connections testuser1, testuser2 DROP USER 'testuser1'@'localhost'; DROP USER 'testuser2'@'localhost'; DROP TABLE t1_1; DROP TABLE t1_2; DROP DATABASE IF EXISTS db_datadict; ######################################################################################## # Testcase 3.2.1.13+3.2.1.14+3.2.1.15: INFORMATION_SCHEMA.KEY_COLUMN_USAGE modifications ######################################################################################## DROP DATABASE IF EXISTS db_datadict; DROP TABLE IF EXISTS test.t1_my_table; CREATE DATABASE db_datadict; SELECT table_name FROM information_schema.key_column_usage WHERE table_name LIKE 't1_my_table%'; table_name CREATE TABLE test.t1_my_table (f1 CHAR(12), f2 TIMESTAMP, f4 BIGINT, PRIMARY KEY(f1,f2)) DEFAULT CHARACTER SET latin1 COLLATE latin1_swedish_ci ENGINE = ; SELECT * FROM information_schema.key_column_usage WHERE table_name = 't1_my_table'; CONSTRAINT_CATALOG NULL CONSTRAINT_SCHEMA test CONSTRAINT_NAME PRIMARY TABLE_CATALOG NULL TABLE_SCHEMA test TABLE_NAME t1_my_table COLUMN_NAME f1 ORDINAL_POSITION 1 POSITION_IN_UNIQUE_CONSTRAINT NULL REFERENCED_TABLE_SCHEMA NULL REFERENCED_TABLE_NAME NULL REFERENCED_COLUMN_NAME NULL CONSTRAINT_CATALOG NULL CONSTRAINT_SCHEMA test CONSTRAINT_NAME PRIMARY TABLE_CATALOG NULL TABLE_SCHEMA test TABLE_NAME t1_my_table COLUMN_NAME f2 ORDINAL_POSITION 2 POSITION_IN_UNIQUE_CONSTRAINT NULL REFERENCED_TABLE_SCHEMA NULL REFERENCED_TABLE_NAME NULL REFERENCED_COLUMN_NAME NULL SELECT DISTINCT table_name FROM information_schema.key_column_usage WHERE table_name LIKE 't1_my_table%'; table_name t1_my_table RENAME TABLE test.t1_my_table TO test.t1_my_tablex; SELECT DISTINCT table_name FROM information_schema.key_column_usage WHERE table_name LIKE 't1_my_table%'; table_name t1_my_tablex SELECT DISTINCT table_schema,table_name FROM information_schema.key_column_usage WHERE table_name = 't1_my_tablex'; table_schema table_name test t1_my_tablex RENAME TABLE test.t1_my_tablex TO db_datadict.t1_my_tablex; SELECT DISTINCT table_schema,table_name FROM information_schema.key_column_usage WHERE table_name = 't1_my_tablex'; table_schema table_name db_datadict t1_my_tablex SELECT DISTINCT table_name, column_name FROM information_schema.key_column_usage WHERE table_name = 't1_my_tablex' ORDER BY table_name, column_name; table_name column_name t1_my_tablex f1 t1_my_tablex f2 ALTER TABLE db_datadict.t1_my_tablex CHANGE COLUMN f1 first_col CHAR(12); SELECT DISTINCT table_name, column_name FROM information_schema.key_column_usage WHERE table_name = 't1_my_tablex' ORDER BY table_name, column_name; table_name column_name t1_my_tablex f2 t1_my_tablex first_col SELECT constraint_schema, constraint_name, table_schema, table_name, column_name, ordinal_position FROM information_schema.key_column_usage WHERE table_name = 't1_my_tablex' ORDER BY constraint_schema, constraint_name, table_schema, table_name, ordinal_position; constraint_schema constraint_name table_schema table_name column_name ordinal_position db_datadict PRIMARY db_datadict t1_my_tablex first_col 1 db_datadict PRIMARY db_datadict t1_my_tablex f2 2 CREATE INDEX f2 ON db_datadict.t1_my_tablex(f2); SELECT constraint_schema, constraint_name, table_schema, table_name, column_name, ordinal_position FROM information_schema.key_column_usage WHERE table_name = 't1_my_tablex' ORDER BY constraint_schema, constraint_name, table_schema, table_name, ordinal_position; constraint_schema constraint_name table_schema table_name column_name ordinal_position db_datadict PRIMARY db_datadict t1_my_tablex first_col 1 db_datadict PRIMARY db_datadict t1_my_tablex f2 2 DROP INDEX f2 ON db_datadict.t1_my_tablex; SELECT constraint_schema, constraint_name, table_schema, table_name, column_name, ordinal_position FROM information_schema.key_column_usage WHERE table_name = 't1_my_tablex' ORDER BY constraint_schema, constraint_name, table_schema, table_name, ordinal_position; constraint_schema constraint_name table_schema table_name column_name ordinal_position db_datadict PRIMARY db_datadict t1_my_tablex first_col 1 db_datadict PRIMARY db_datadict t1_my_tablex f2 2 ALTER TABLE db_datadict.t1_my_tablex ADD UNIQUE (f2); SELECT constraint_schema, constraint_name, table_schema, table_name, column_name, ordinal_position FROM information_schema.key_column_usage WHERE table_name = 't1_my_tablex' ORDER BY constraint_schema, constraint_name, table_schema, table_name, ordinal_position; constraint_schema constraint_name table_schema table_name column_name ordinal_position db_datadict f2 db_datadict t1_my_tablex f2 1 db_datadict PRIMARY db_datadict t1_my_tablex first_col 1 db_datadict PRIMARY db_datadict t1_my_tablex f2 2 DROP INDEX f2 ON db_datadict.t1_my_tablex; SELECT constraint_schema, constraint_name, table_schema, table_name, column_name, ordinal_position FROM information_schema.key_column_usage WHERE table_name = 't1_my_tablex' ORDER BY constraint_schema, constraint_name, table_schema, table_name, ordinal_position; constraint_schema constraint_name table_schema table_name column_name ordinal_position db_datadict PRIMARY db_datadict t1_my_tablex first_col 1 db_datadict PRIMARY db_datadict t1_my_tablex f2 2 ALTER TABLE db_datadict.t1_my_tablex ADD UNIQUE my_idx (f2); SELECT constraint_schema, constraint_name, table_schema, table_name, column_name, ordinal_position FROM information_schema.key_column_usage WHERE table_name = 't1_my_tablex' ORDER BY constraint_schema, constraint_name, table_schema, table_name, ordinal_position; constraint_schema constraint_name table_schema table_name column_name ordinal_position db_datadict my_idx db_datadict t1_my_tablex f2 1 db_datadict PRIMARY db_datadict t1_my_tablex first_col 1 db_datadict PRIMARY db_datadict t1_my_tablex f2 2 DROP INDEX my_idx ON db_datadict.t1_my_tablex; SELECT constraint_schema, constraint_name, table_schema, table_name, column_name, ordinal_position FROM information_schema.key_column_usage WHERE table_name = 't1_my_tablex' ORDER BY constraint_schema, constraint_name, table_schema, table_name, ordinal_position; constraint_schema constraint_name table_schema table_name column_name ordinal_position db_datadict PRIMARY db_datadict t1_my_tablex first_col 1 db_datadict PRIMARY db_datadict t1_my_tablex f2 2 ALTER TABLE db_datadict.t1_my_tablex ADD UNIQUE my_idx (f4,first_col); SELECT constraint_schema, constraint_name, table_schema, table_name, column_name, ordinal_position FROM information_schema.key_column_usage WHERE table_name = 't1_my_tablex' ORDER BY constraint_schema, constraint_name, table_schema, table_name, ordinal_position; constraint_schema constraint_name table_schema table_name column_name ordinal_position db_datadict my_idx db_datadict t1_my_tablex f4 1 db_datadict my_idx db_datadict t1_my_tablex first_col 2 db_datadict PRIMARY db_datadict t1_my_tablex first_col 1 db_datadict PRIMARY db_datadict t1_my_tablex f2 2 SELECT constraint_schema, constraint_name, table_schema, table_name, column_name, ordinal_position FROM information_schema.key_column_usage WHERE table_name = 't1_my_tablex' ORDER BY constraint_schema, constraint_name, table_schema, table_name, ordinal_position; constraint_schema constraint_name table_schema table_name column_name ordinal_position db_datadict my_idx db_datadict t1_my_tablex f4 1 db_datadict my_idx db_datadict t1_my_tablex first_col 2 db_datadict PRIMARY db_datadict t1_my_tablex first_col 1 db_datadict PRIMARY db_datadict t1_my_tablex f2 2 ALTER TABLE db_datadict.t1_my_tablex DROP COLUMN first_col; SELECT constraint_schema, constraint_name, table_schema, table_name, column_name, ordinal_position FROM information_schema.key_column_usage WHERE table_name = 't1_my_tablex' ORDER BY constraint_schema, constraint_name, table_schema, table_name, ordinal_position; constraint_schema constraint_name table_schema table_name column_name ordinal_position db_datadict my_idx db_datadict t1_my_tablex f4 1 db_datadict PRIMARY db_datadict t1_my_tablex f2 1 SELECT table_name, column_name FROM information_schema.key_column_usage WHERE table_name = 't1_my_tablex' ORDER BY table_name, column_name; table_name column_name t1_my_tablex f2 t1_my_tablex f4 DROP TABLE db_datadict.t1_my_tablex; SELECT table_name, column_name FROM information_schema.key_column_usage WHERE table_name = 't1_my_tablex'; table_name column_name SELECT table_name FROM information_schema.key_column_usage WHERE table_name = 't1_my_tablex'; table_name CREATE TABLE db_datadict.t1_my_tablex ENGINE = AS SELECT 1 AS f1; SELECT table_name FROM information_schema.key_column_usage WHERE table_name = 't1_my_tablex'; table_name ALTER TABLE db_datadict.t1_my_tablex ADD PRIMARY KEY(f1); SELECT table_name FROM information_schema.key_column_usage WHERE table_name = 't1_my_tablex'; table_name t1_my_tablex SELECT table_name FROM information_schema.key_column_usage WHERE table_name = 't1_my_tablex'; table_name t1_my_tablex DROP DATABASE db_datadict; SELECT table_name FROM information_schema.key_column_usage WHERE table_name = 't1_my_tablex'; table_name ######################################################################## # Testcases 3.2.1.3-3.2.1.5 + 3.2.1.8-3.2.1.12: INSERT/UPDATE/DELETE and # DDL on INFORMATION_SCHEMA table are not supported ######################################################################## DROP DATABASE IF EXISTS db_datadict; DROP TABLE IF EXISTS db_datadict.t1; CREATE DATABASE db_datadict; CREATE TABLE db_datadict.t1 (f1 BIGINT) ENGINE = ; INSERT INTO information_schema.key_column_usage (constraint_schema, constraint_name, table_name) VALUES ( 'mysql', 'primary', 'db'); ERROR 42000: Access denied for user 'root'@'localhost' to database 'information_schema' INSERT INTO information_schema.key_column_usage SELECT * FROM information_schema.key_column_usage; ERROR 42000: Access denied for user 'root'@'localhost' to database 'information_schema' UPDATE information_schema.key_column_usage SET table_name = 'db1' WHERE constraint_name = 'primary'; ERROR 42000: Access denied for user 'root'@'localhost' to database 'information_schema' DELETE FROM information_schema.key_column_usage WHERE table_name = 't1'; ERROR 42000: Access denied for user 'root'@'localhost' to database 'information_schema' TRUNCATE information_schema.key_column_usage; ERROR 42000: Access denied for user 'root'@'localhost' to database 'information_schema' CREATE INDEX i3 ON information_schema.key_column_usage(table_name); ERROR 42000: Access denied for user 'root'@'localhost' to database 'information_schema' ALTER TABLE information_schema.key_column_usage ADD f1 INT; ERROR 42000: Access denied for user 'root'@'localhost' to database 'information_schema' DROP TABLE information_schema.key_column_usage; ERROR 42000: Access denied for user 'root'@'localhost' to database 'information_schema' ALTER TABLE information_schema.key_column_usage RENAME db_datadict.key_column_usage; ERROR 42000: Access denied for user 'root'@'localhost' to database 'information_schema' ALTER TABLE information_schema.key_column_usage RENAME information_schema.xkey_column_usage; ERROR 42000: Access denied for user 'root'@'localhost' to database 'information_schema' DROP TABLE db_datadict.t1; DROP DATABASE db_datadict;