Показать ограничения для команды таблиц
У меня есть таблицы, в которых я пытался установить отношения PK FK, но я хочу проверить это. Как я могу показать ограничения PK / FK? Я видел эту страницу руководства, но она не показывает примеры, и мой поиск в google также оказался бесплодным. Моя firebase database – это cred_insurances
а мои таблицы с ограничениями – это practices
и cred_insurances
.
я использую
SHOW CREATE TABLE mytable;
Это показывает вам инструкцию SQL, необходимую для получения mytable
в текущей форме. Вы можете видеть все столбцы и их типы (например, DESC
), но также отображает информацию ограничения (и тип таблицы, кодировку и т. Д.).
Просто запросите 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 = "" AND TABLE_NAME = "" AND REFERENCED_COLUMN_NAME IS NOT NULL;
Основная проблема с подтвержденным ответом заключается в том, что вам придется анализировать выходные данные для получения информации. Вот запрос, позволяющий получить их более удобным образом:
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"
afaik, чтобы сделать запрос к information_schema
вам нужны привилегии. Если вам нужен простой список ключей, вы можете использовать эту команду:
SHOW INDEXES IN
Попробуйте сделать:
SHOW TABLE STATUS FROM credentialing1;
Ограничения внешнего ключа перечислены в столбце « Комментарий» на выходе.
Вы можете использовать это:
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'
Аналогично @ 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.
Существует также инструмент, созданный 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 | | | +--------+------------+--------------------------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+