Для одного из проектов понадобилось узнать имя поля у таблицы содержащего в себе первичный ключ. Погуглив ничего путного не нашел, ответ нарыл случайно в lists на официальном сайте. Запрос оказался очень интересным, оказывается выборку надо производить из вспомогательных полей самого MySQL.
Запрос для базы с именем db, и таблицы с именем tbl.
SELECT k.column_name FROM information_schema.table_constraints t JOIN information_schema.key_column_usage k USING(constraint_name,table_schema,table_name) WHERE t.constraint_type='PRIMARY KEY' AND t.table_schema='db' AND t.table_name='tbl';
При желании имя БД можно опустить, но это чревато тем, что можно получить несколько результатов, если есть таблицы с одинаковым именем в разных БД.
UPD: Спасибо Максиму, решение намного проще и изящнее.
SHOW COLUMNS FROM `table` WHERE `key`=’pri’;



