Страницы

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

пятница, 10 января 2020 г.

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

#mysql #python_3x


Есть произвольные таблицы и необходимо узнать название поля 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
    


Ответы

Ответ 1



SELECT pk.table_name, column_name as 'primary_key' FROM information_schema.table_constraints pk INNER JOIN information_schema.key_column_usage C on c.table_name = pk.table_name and c.constraint_name = pk.constraint_name where constraint_type = 'primary key' -- and pk.table_name LIKE '%whatever%'

Ответ 2



Немного изменил запрос от @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

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

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