我有我尝试设置PK FK关系的表格,但我想验证这一点。我如何显示PK/FK限制?我看到了this手册页,但它没有显示示例,我的谷歌搜索也没有结果。我的数据库是凭证1,而我受约束的表是实践和cred_insurances。在表格上显示约束命令
回答
我用
SHOW CREATE TABLE mytable;
这说明你目前的形式,以receate mytable
必要的SQL语句。您可以看到所有列及其类型(如DESC
),但它还显示约束信息(以及表格类型,字符集等)。
尝试做:
SHOW TABLE STATUS FROM credentialing1;
外键约束被列在输出的评论列。
我只在“评论”列中看到表格注释。这可能与InnoDB类型有关。 – clockworkgeek 2012-12-30 13:48:17
评论仅供用户评论。这当然不是FK定义存储的地方!如果它们适合你 - 它必须由你的一些RDBMS工具代表你完成。 – stamster 2018-02-24 18:13:07
简单的查询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;
这是最好的答案,因为它以可以通过编程方式使用的格式为您提供结果。当然,你需要添加一个WHERE子句来缩小结果的范围 – 2014-01-27 10:30:05
这帮助我找到一个具有引用多个外键的'id'列的损坏表。难怪桌子有1452 IntegrityError。 – 2015-09-05 16:03:07
这是很好的答案!谢谢@ Resh32 – simhumileco 2017-08-21 11:57:43
您可以使用此:
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'
ORA-00942:表或视图不存在 00942. 00000 - “表或视图不存在” *原因: *动作: 行错误:29列:5 第29行是“information_schema.key_column_usage” – noboundaries 2013-08-28 10:37:01
@noboundaries你想上的Oracle,这个问题是关于MySQL – ymajoros 2014-09-12 05:05:58
的主要问题与验证答案你将不得不解析输出以获取信息。下面是一个查询让你让他们在一个更有用的方式:
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"
据我所知做出information_schema
请求你需要的权限。如果你需要的键简单的列表,你可以使用这个命令:
SHOW INDEXES IN <tablename>
感谢,对我 – 2016-07-10 11:19:22
如何呼唤INFORMATION_SCHEMA是比这更好的工作,非常感谢 – 2017-02-21 04:59:26
酷感谢,这是最好的 – 2017-04-11 20:48:17
还有一个是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。
那将不会显示实际的约束规则 - 例如'更新CASCADE' – stamster 2018-02-24 18:39:34
- 1. R:sample()命令受到约束
- 2. TMUX:在显示命令提示时显示显示窗格?
- 3. Mysql显示创建约束?
- 4. 右上约束格式
- 5. Grails命令对象可空约束
- 6. 在MySQL上重命名主键约束
- 7. 在命令行上显示“Canopy”
- 8. 在jqGrid的数据不具有约束力,显示空白格
- 9. 在sql表上约束表条目
- 10. UIView约束在iPad上不显示相同的结果
- 11. 如何在MySQL中显示表的唯一约束?
- 12. Grails:如何在列表中显示列应用约束
- 13. 显示NETSH命令
- 14. 在表上设置列约束(SQL Server)
- 15. SQLite表约束 - 在多列上唯一
- 16. 在多个表上启用Oracle约束
- 17. 在表上禁用外键约束?
- 18. 使用GHC.Generics时添加显示约束
- 19. 为什么“继续”命令会在某些Google表格上显示,但不会显示其他人
- 20. C#在命令提示符下运行命令并显示命令
- 21. PHP/SQL命令列表不显示
- 22. Shell:子命令列表/显示
- 23. 表格作为指令在angularjs中显示超出表格上下文
- 24. Fluent NHibernate主键约束命名约定
- 25. 唯一约束的命名约定
- 26. 更改外键约束命名约定
- 27. 查找约束所属的表格
- 28. 查看表格作为约束条件
- 29. 约束命名的目的
- 30. 束在命令行安装
我不认为它显示传入的fk关系?例如'a.col_one引用b.col_one'和'show create table b'将不包含关于上述关系的细节。 – 2014-10-10 09:44:16
我确认此命令不显示外键约束。 – 2016-06-06 22:34:04
注意MariaDB从10开始。2会在这里返回尴尬的结果。 https://jira.mariadb.org/browse/MDEV-15377 – stamster 2018-02-24 18:14:36