在mysql information_schema中找不到表格详细信息

时间:2010-02-17 01:37:55

标签: mysql information-schema

我正在进行一项任务,我应该找到“空白”数据库的information_schema中的所有表。我可以在MySQL或PostgreSQL中执行此操作。我选择了MySQL。所以,我已经确定了所有表格:

  1. CHARACTER_SETS
  2. COLLATIONS
  3. COLLATION_CHARACTER_SET_APPLICABILITY
  4. COLUMN_PRIVILEGES
  5. INDEX_STATISTICS
  6. KEY_COLUMN_USAGE
  7. PROFILING
  8. 例程
  9. SCHEMATA
  10. SCHEMA_PRIVILEGES
  11. 统计
  12. TABLES
  13. TABLE_CONSTRAINTS
  14. TABLE_PRIVILEGES
  15. TABLE_STATISTICS
  16. TRIGGERS
  17. USER_PRIVILEGES
  18. 视图
  19. 现在,我必须找到有关这些表的详细信息。例如,主键定义,表列,外键,触发器操作等

    然而,我遇到的问题是这些表中没有一个列出任何主键或外键或约束等。

    我误解了吗?或者可以在任何地方找到这些信息?我很感激任何帮助。

2 个答案:

答案 0 :(得分:1)

你应该看table_constraints

SELECT `table_name`, `constraint_name`, `constraint_type` 
FROM `information_schema`.`table_constraints` 
WHERE `table_schema` = 'yourdbname';

这将为您提供约束名称和类型。如果您需要更多详细信息,则需要加入key_column_usage

SELECT c.`table_schema`, c.`table_name`, c.`constraint_name`,
c.`constraint_type`, GROUP_CONCAT(k.`column_name` ORDER BY `ordinal_position`) AS 'constraint columns',
CONCAT(k.`referenced_table_name`, '(', GROUP_CONCAT(`referenced_column_name` ORDER BY `position_in_unique_constraint`),')') AS 'references' 
FROM `information_schema`.`table_constraints` c 
JOIN `information_schema`.`key_column_usage` k USING (`constraint_name`, `table_name`) 
WHERE c.`table_schema` = 'yourdbname' 
GROUP BY `table_schema`,`table_name`,`constraint_name`,`constraint_type`,`referenced_table_name`;

答案 1 :(得分:0)

您是否尝试过命令DESCRIBE table;

如果有主键,您会看到......

+-------+--------------+------+-----+---------+----------------+
| Field | Type         | Null | Key | Default | Extra          |
+-------+--------------+------+-----+---------+----------------+
| id    | int(11)      | NO   | PRI | NULL    | auto_increment |
| name  | varchar(128) | NO   |     | NULL    |                |
+-------+--------------+------+-----+---------+----------------+