19

我试图找出如何从 MySQL 5.0 中的表中获取以下约束信息:

  • 首要的关键
  • 外键和表引用
  • 独特的列

这样做的查询或查询的语法是什么?我觉得我很接近这个,但没有例子。

4

5 回答 5

26

对于 MySQL:

1) 获取表/字段元数据

SELECT table_schema, table_name, column_name, ordinal_position, data_type, 
       numeric_precision, column_type, column_default, is_nullable, column_comment 
  FROM information_schema.columns 
  WHERE (table_schema='schema_name' and table_name = 'table_name')
  order by ordinal_position;

或者

show fields from 'table_name' 

2) 获取外键引用表

SELECT `REFERENCED_TABLE_NAME` 
   FROM `information_schema`.`KEY_COLUMN_USAGE`
   WHERE
       `TABLE_NAME` = 'table_name' AND
       `COLUMN_NAME` = 'Column_Name'

3) 获取表的索引(主索引和外索引)

show keys from `table_name`

5)获取所有索引和引用表

SELECT *
  FROM `KEY_COLUMN_USAGE`
  WHERE
      `TABLE_NAME` = 'table_name' AND
      `TABLE_SCHEMA` = 'schema_name'

或者

SELECT *
  FROM `REFERENTIAL_CONSTRAINTS`
  WHERE
      `TABLE_NAME` = 'table_name' AND
      `CONSTRAINT_SCHEMA` = 'schema_name'

6) 获取存储过程

SELECT * 
  FROM `ROUTINES`
  WHERE
     `ROUTINE_SCHEMA` = 'schema_name'

7) 获得触发器

SELECT * 
  FROM `TRIGGERS`
  WHERE 
     `TRIGGER_SCHEMA` = 'schema_name'

8) 获取事件

SELECT * 
  FROM `EVENTS`
  WHERE 
     `EVENT_SCHEMA` = 'schema_name'

9) 获得意见

SELECT *
  FROM `VIEWS`
  WHERE
      `TABLE_NAME` = 'table_name' AND
      `TABLE_SCHEMA` = 'schema_name'
于 2015-12-26T15:28:28.407 回答
9

SHOW COLUMNS命令将显示表的主键和唯一列。

至于外键,您可以使用SHOW CREATE TABLE命令之类的命令,该命令将输出复制表所需的 DDL 语句。

于 2009-02-04T07:46:17.953 回答
8

采用

 show fields from table_name
 show keys from table_name

获取主键、外键、唯一键等。

要获取外键引用的表,请使用:

 SELECT `REFERENCED_TABLE_NAME` 
 FROM `information_schema`.`KEY_COLUMN_USAGE` 
 WHERE 
     `TABLE_NAME` = '[table_containing_foreign_key]' AND 
     `COLUMN_NAME` = '[foreign_key]'

[table_containing_foreign_key]用你的[foreign_key]价值观代替

于 2011-09-16T12:31:06.770 回答
2

你应该试试看。INFORMATION_SCHEMA 是某些标准的一部分,并且在其他数据库中以(大部分)类似的方式得到支持;该标准应记录在案 - 您可以查找该文档。

但主要的方法是创建一堆测试表,然后看看 INFORMATION_SCHEMA 看看有什么。

于 2009-02-04T07:39:26.643 回答
2

使用以下内容使用 Select Query 获得相同的结果:

SELECT table_schema, table_name, column_name, ordinal_position, data_type, numeric_precision, column_type FROM information_schema.columns WHERE table_name = '[TABLE_NAME]';
于 2013-07-23T21:57:33.847 回答