Не удается найти детали таблицы в mysql information_schema - PullRequest
2 голосов
/ 17 февраля 2010

Я работаю над заданием, в котором я должен найти все таблицы в information_schema «пустой» базы данных. Я могу сделать это в MySQL или PostgreSQL. Я выбрал MySQL. Итак, я определил все таблицы:

  1. CHARACTER_SETS
  2. ЗАКУСКИ
  3. COLLATION_CHARACTER_SET_APPLICABILITY
  4. ОПОРА
  5. COLUMN_PRIVILEGES
  6. INDEX_STATISTICS
  7. KEY_COLUMN_USAGE
  8. PROFILING
  9. ROUTINES
  10. SCHEMATA
  11. SCHEMA_PRIVILEGES
  12. СТАТИСТИКА
  13. ТАБЛИЦА
  14. TABLE_CONSTRAINTS
  15. TABLE_PRIVILEGES
  16. TABLE_STATISTICS
  17. Триггеры
  18. USER_PRIVILEGES
  19. МНЕНИЯ

Теперь я должен найти подробности об этих таблицах. Например, определения первичного ключа, столбцы таблицы, внешние ключи, действия триггера и т. Д.

Однако проблема, с которой я сталкиваюсь, заключается в том, что ни в одной из этих таблиц не указаны первичные ключи, внешние ключи или ограничения и т. Д.

Я неправильно истолковал? Или эту информацию можно найти где-нибудь? Буду признателен за любую помощь.

Ответы [ 2 ]

1 голос
/ 18 ноября 2017

Вы должны искать в 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`;
0 голосов
/ 17 февраля 2010

Вы пробовали команду DESCRIBE table;?

Если есть первичный ключ, вы увидите ...

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