显示表上的约束命令
我有表格,我已经尝试设置PK FK关系,但我想validation这一点。 我如何显示PK / FK限制? 我看到了这个手册页,但没有显示例子,我的谷歌search也没有结果。 我的数据库是凭证1,我的受约束的表是实践和cred_insurances。
我用
SHOW CREATE TABLE mytable;
这将向您显示接收当前表单所需的SQL语句。 你可以看到所有的列和他们的types(如DESC
),但它也显示了约束信息(和表types,字符集等)。
只需查询INFORMATION_SCHEMA:
USE INFORMATION_SCHEMA; SELECT TABLE_NAME, COLUMN_NAME, CONSTRAINT_NAME, REFERENCED_TABLE_NAME, REFERENCED_COLUMN_NAME FROM KEY_COLUMN_USAGE WHERE TABLE_SCHEMA = "<your_database_name>" AND TABLE_NAME = "<your_table_name>" AND REFERENCED_COLUMN_NAME IS NOT NULL;
validation答案的主要问题是您必须parsing输出以获取信息。 这是一个查询,可以让你以更有用的方式获取它们:
SELECT cols.TABLE_NAME, cols.COLUMN_NAME, cols.ORDINAL_POSITION, cols.COLUMN_DEFAULT, cols.IS_NULLABLE, cols.DATA_TYPE, cols.CHARACTER_MAXIMUM_LENGTH, cols.CHARACTER_OCTET_LENGTH, cols.NUMERIC_PRECISION, cols.NUMERIC_SCALE, cols.COLUMN_TYPE, cols.COLUMN_KEY, cols.EXTRA, cols.COLUMN_COMMENT, refs.REFERENCED_TABLE_NAME, refs.REFERENCED_COLUMN_NAME, cRefs.UPDATE_RULE, cRefs.DELETE_RULE, links.TABLE_NAME, links.COLUMN_NAME, cLinks.UPDATE_RULE, cLinks.DELETE_RULE FROM INFORMATION_SCHEMA.`COLUMNS` as cols LEFT JOIN INFORMATION_SCHEMA.`KEY_COLUMN_USAGE` AS refs ON refs.TABLE_SCHEMA=cols.TABLE_SCHEMA AND refs.REFERENCED_TABLE_SCHEMA=cols.TABLE_SCHEMA AND refs.TABLE_NAME=cols.TABLE_NAME AND refs.COLUMN_NAME=cols.COLUMN_NAME LEFT JOIN INFORMATION_SCHEMA.REFERENTIAL_CONSTRAINTS AS cRefs ON cRefs.CONSTRAINT_SCHEMA=cols.TABLE_SCHEMA AND cRefs.CONSTRAINT_NAME=refs.CONSTRAINT_NAME LEFT JOIN INFORMATION_SCHEMA.`KEY_COLUMN_USAGE` AS links ON links.TABLE_SCHEMA=cols.TABLE_SCHEMA AND links.REFERENCED_TABLE_SCHEMA=cols.TABLE_SCHEMA AND links.REFERENCED_TABLE_NAME=cols.TABLE_NAME AND links.REFERENCED_COLUMN_NAME=cols.COLUMN_NAME LEFT JOIN INFORMATION_SCHEMA.REFERENTIAL_CONSTRAINTS AS cLinks ON cLinks.CONSTRAINT_SCHEMA=cols.TABLE_SCHEMA AND cLinks.CONSTRAINT_NAME=links.CONSTRAINT_NAME WHERE cols.TABLE_SCHEMA=DATABASE() AND cols.TABLE_NAME="table"
尝试做:
SHOW TABLE STATUS FROM credentialing1;
输出的“ 注释”列中列出了外键约束。
afaik向information_schema
发出你需要特权的请求。 如果你需要简单的键列表,你可以使用这个命令:
SHOW INDEXES IN <tablename>
你可以使用这个:
select table_name,column_name,referenced_table_name,referenced_column_name from information_schema.key_column_usage where referenced_table_name is not null and table_schema = 'my_database' and table_name = 'my_table'
或者为了更好的格式化输出使用这个:
select concat(table_name, '.', column_name) as 'foreign key', concat(referenced_table_name, '.', referenced_column_name) as 'references' from information_schema.key_column_usage where referenced_table_name is not null and table_schema = 'my_database' and table_name = 'my_table'
还有一个oracle的工具叫做mysqlshow
如果使用--k keys $table_name
选项运行它,将显示键。
SYNOPSIS mysqlshow [options] [db_name [tbl_name [col_name]]] ....... ....... ....... · --keys, -k Show table indexes.
例:
╰─➤ mysqlshow -h 127.0.0.1 -u root -p --keys database tokens Database: database Table: tokens +-----------------+------------------+--------------------+------+-----+---------+----------------+---------------------------------+---------+ | Field | Type | Collation | Null | Key | Default | Extra | Privileges | Comment | +-----------------+------------------+--------------------+------+-----+---------+----------------+---------------------------------+---------+ | id | int(10) unsigned | | NO | PRI | | auto_increment | select,insert,update,references | | | token | text | utf8mb4_unicode_ci | NO | | | | select,insert,update,references | | | user_id | int(10) unsigned | | NO | MUL | | | select,insert,update,references | | | expires_in | datetime | | YES | | | | select,insert,update,references | | | created_at | timestamp | | YES | | | | select,insert,update,references | | | updated_at | timestamp | | YES | | | | select,insert,update,references | | +-----------------+------------------+--------------------+------+-----+---------+----------------+---------------------------------+---------+ +--------+------------+--------------------------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+ | Table | Non_unique | Key_name | Seq_in_index | Column_name | Collation | Cardinality | Sub_part | Packed | Null | Index_type | Comment | Index_comment | +--------+------------+--------------------------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+ | tokens | 0 | PRIMARY | 1 | id | A | 2 | | | | BTREE | | | | tokens | 1 | tokens_user_id_foreign | 1 | user_id | A | 2 | | | | BTREE | | | +--------+------------+--------------------------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+
类似于@ Resh32 ,但不需要使用USE
语句:
SELECT TABLE_NAME, COLUMN_NAME, CONSTRAINT_NAME, REFERENCED_TABLE_NAME, REFERENCED_COLUMN_NAME FROM INFORMATION_SCHEMA.KEY_COLUMN_USAGE WHERE TABLE_SCHEMA = "database_name" AND TABLE_NAME = "table_name" AND REFERENCED_COLUMN_NAME IS NOT NULL;
有用的,例如使用ORM。