Страницы

Поиск по вопросам

среда, 20 февраля 2019 г.

SQL получить названия поля с PRIMARY KEY

Есть произвольные таблицы и необходимо узнать название поля c PRIMARY KEY, как это можно сделать SQL (использую MySQL) запросом или средствами Python v3 и библиотечки PyMySQL?

Есть допустим табличка такой структуры:
CREATE TABLE `test` ( `name` text, `this_id` int(11) NOT NULL, PRIMARY KEY (`this_id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
И необходимо вернуть this_id


Ответ

Немного изменил запрос от @L. Vadim
-- Выводим значения поля COLUMN_NAME из таблице information_schema.TABLE_CONSTRAINTS SELECT C.COLUMN_NAME FROM information_schema.TABLE_CONSTRAINTS AS pk /* Делаем INNER JOIN из-за того что нам нужны только пересечения полей: TABLE_NAME название таблицы, CONSTRAINT_NAME название поля с ключом TABLE_SCHEMA название базы */ INNER JOIN information_schema.KEY_COLUMN_USAGE AS C ON C.TABLE_NAME = pk.TABLE_NAME AND C.CONSTRAINT_NAME = pk.CONSTRAINT_NAME AND C.TABLE_SCHEMA = pk.TABLE_SCHEMA
/* Условия: TABLE_NAME название таблицы, TABLE_SCHEMA название базы CONSTRAINT_TYPE поле где указан PRIMARY KEY */ WHERE pk.TABLE_NAME = 'test' AND pk.TABLE_SCHEMA = 'test_db' AND pk.CONSTRAINT_TYPE = 'PRIMARY KEY';
Вариант без комментариев:
SELECT C.COLUMN_NAME FROM information_schema.table_constraints AS pk INNER JOIN information_schema.KEY_COLUMN_USAGE AS C ON C.TABLE_NAME = pk.TABLE_NAME AND C.CONSTRAINT_NAME = pk.CONSTRAINT_NAME AND C.TABLE_SCHEMA = pk.TABLE_SCHEMA WHERE pk.TABLE_NAME = 'test' AND pk.TABLE_SCHEMA = 'test_db' AND pk.CONSTRAINT_TYPE = 'PRIMARY KEY';

Я не уверен в правельности текста ниже, так-как он был написан из быстрого изучения таблиц: information_schema.TABLE_CONSTRAINTS и information_schema.KEY_COLUMN_USAGE
Как я понял, в таблице information_schema.TABLE_CONSTRAINTS храниться информация о всех ключах для всех баз и соединяем их с таблицей information_schema.KEY_COLUMN_USAGE по полю CONSTRAINT_NAME где хранится название нашего ключа в нашем случаи это PRIMARY и уже в information_schema.KEY_COLUMN_USAGE находятся все поля с ключами, название поля в поле COLUMN_NAME

Комментариев нет:

Отправить комментарий