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) NO CONSTRAINT_SCHEMA varchar(64) NO CONSTRAINT_NAME varchar(64) NO TABLE_CATALOG varchar(512) NO 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) NOT NULL DEFAULT '', `CONSTRAINT_SCHEMA` varchar(64) NOT NULL DEFAULT '', `CONSTRAINT_NAME` varchar(64) NOT NULL DEFAULT '', `TABLE_CATALOG` varchar(512) NOT NULL DEFAULT '', `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) NO CONSTRAINT_SCHEMA varchar(64) NO CONSTRAINT_NAME varchar(64) NO TABLE_CATALOG varchar(512) NO 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 ORDER BY BINARY table_schema, BINARY table_name, BINARY column_name, BINARY constraint_name; constraint_catalog constraint_schema constraint_name table_catalog table_schema table_name column_name def mysql PRIMARY def mysql column_stats column_name def mysql PRIMARY def mysql column_stats db_name def mysql PRIMARY def mysql column_stats table_name def mysql PRIMARY def mysql columns_priv Column_name def mysql PRIMARY def mysql columns_priv Db def mysql PRIMARY def mysql columns_priv Host def mysql PRIMARY def mysql columns_priv Table_name def mysql PRIMARY def mysql columns_priv User def mysql PRIMARY def mysql db Db def mysql PRIMARY def mysql db Host def mysql PRIMARY def mysql db User def mysql PRIMARY def mysql event db def mysql PRIMARY def mysql event name def mysql PRIMARY def mysql func name def mysql PRIMARY def mysql global_priv Host def mysql PRIMARY def mysql global_priv User def mysql PRIMARY def mysql gtid_slave_pos domain_id def mysql PRIMARY def mysql gtid_slave_pos sub_id def mysql PRIMARY def mysql help_category help_category_id def mysql name def mysql help_category name def mysql PRIMARY def mysql help_keyword help_keyword_id def mysql name def mysql help_keyword name def mysql PRIMARY def mysql help_relation help_keyword_id def mysql PRIMARY def mysql help_relation help_topic_id def mysql PRIMARY def mysql help_topic help_topic_id def mysql name def mysql help_topic name def mysql PRIMARY def mysql index_stats db_name def mysql PRIMARY def mysql index_stats index_name def mysql PRIMARY def mysql index_stats prefix_arity def mysql PRIMARY def mysql index_stats table_name def mysql PRIMARY def mysql innodb_index_stats database_name def mysql PRIMARY def mysql innodb_index_stats index_name def mysql PRIMARY def mysql innodb_index_stats stat_name def mysql PRIMARY def mysql innodb_index_stats table_name def mysql PRIMARY def mysql innodb_table_stats database_name def mysql PRIMARY def mysql innodb_table_stats table_name def mysql PRIMARY def mysql plugin name def mysql PRIMARY def mysql proc db def mysql PRIMARY def mysql proc name def mysql PRIMARY def mysql proc type def mysql PRIMARY def mysql procs_priv Db def mysql PRIMARY def mysql procs_priv Host def mysql PRIMARY def mysql procs_priv Routine_name def mysql PRIMARY def mysql procs_priv Routine_type def mysql PRIMARY def mysql procs_priv User def mysql PRIMARY def mysql proxies_priv Host def mysql PRIMARY def mysql proxies_priv Proxied_host def mysql PRIMARY def mysql proxies_priv Proxied_user def mysql PRIMARY def mysql proxies_priv User def mysql Host def mysql roles_mapping Host def mysql Host def mysql roles_mapping Role def mysql Host def mysql roles_mapping User def mysql PRIMARY def mysql servers Server_name def mysql PRIMARY def mysql table_stats db_name def mysql PRIMARY def mysql table_stats table_name def mysql PRIMARY def mysql tables_priv Db def mysql PRIMARY def mysql tables_priv Host def mysql PRIMARY def mysql tables_priv Table_name def mysql PRIMARY def mysql tables_priv User def mysql PRIMARY def mysql time_zone Time_zone_id def mysql PRIMARY def mysql time_zone_leap_second Transition_time def mysql PRIMARY def mysql time_zone_name Name def mysql PRIMARY def mysql time_zone_transition Time_zone_id def mysql PRIMARY def mysql time_zone_transition Transition_time def mysql PRIMARY def mysql time_zone_transition_type Time_zone_id def mysql PRIMARY def mysql time_zone_transition_type Transition_type_id def mysql commit_id def mysql transaction_registry commit_id def mysql PRIMARY def mysql transaction_registry transaction_id def sys PRIMARY def sys sys_config variable ######################################################################################## # 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 = <engine_type>; 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 = <engine_type>; 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 def db_datadict PRIMARY def db_datadict t1_1 f1 1 NULL NULL NULL NULL def db_datadict PRIMARY def db_datadict t1_2 f1 1 NULL NULL NULL NULL connect testuser1, localhost, testuser1, , db_datadict; 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 def db_datadict PRIMARY def db_datadict t1_1 f1 1 NULL NULL NULL NULL connect testuser2, localhost, testuser2, , db_datadict; 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 def db_datadict PRIMARY def db_datadict t1_2 f1 1 NULL NULL NULL NULL connection default; disconnect testuser1; disconnect 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 = <engine_type>; SELECT * FROM information_schema.key_column_usage WHERE table_name = 't1_my_table'; CONSTRAINT_CATALOG def CONSTRAINT_SCHEMA test CONSTRAINT_NAME PRIMARY TABLE_CATALOG def 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 def CONSTRAINT_SCHEMA test CONSTRAINT_NAME PRIMARY TABLE_CATALOG def 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 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 t1_my_tablex first_col t1_my_tablex first_col 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 = <engine_type> 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 = <engine_type>; 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'; Got one of the listed errors 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;