2

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

  1. CHARACTER_SETS
  2. 校对
  3. COLLATION_CHARACTER_SET_APPLICABILITY
  4. COLUMN_PRIVILEGES
  5. INDEX_STATISTICS
  6. KEY_COLUMN_USAGE
  7. 分析
  8. 例行公事
  9. 图式
  10. SCHEMA_PRIVILEGES
  11. 统计数据
  12. 表格
  13. TABLE_CONSTRAINTS
  14. TABLE_PRIVILEGES
  15. TABLE_STATISTICS
  16. 触发器
  17. USER_PRIVILEGES
  18. 意见

现在,我必须找到有关这些表的详细信息。例如主键定义、表列、外键、触发动作等。

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

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

4

2 回答 2

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`;
于 2017-11-18T19:27:35.430 回答
0

你试过命令DESCRIBE table;吗?

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

+-------+--------------+------+-----+---------+----------------+
| Field | Type         | Null | Key | Default | Extra          |
+-------+--------------+------+-----+---------+----------------+
| id    | int(11)      | NO   | PRI | NULL    | auto_increment |
| name  | varchar(128) | NO   |     | NULL    |                |
+-------+--------------+------+-----+---------+----------------+
于 2010-02-17T02:01:04.270 回答