Получить первичный ключ таблицы?

Есть ли способ получить имя поля первичного ключа из базы данных mysql? Например:

У меня есть таблица вроде этого:

+----+------+ | id | name | +----+------+ | 1 | Foo1 | | 2 | Foo2 | | 3 | Foo3 | +----+------+ 

Если идентификатор поля является первичным ключом (он имеет автоматическое увеличение, но я не могу его использовать). Как получить имя поля «id» в php?

Solutions Collecting From Web of "Получить первичный ключ таблицы?"

Лучший способ – использовать SHOW KEYS так как у вас не всегда есть доступ к information_schema. Следующие работы:

 SHOW KEYS FROM table WHERE Key_name = 'PRIMARY' 

Имя столбца будет содержать имя первичного ключа.

Вот имя столбца основного ключа

 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='YourDatabase' AND t.table_name='YourTable'; 
 SELECT kcu.column_name FROM information_schema.key_column_usage WHERE table_schema = schema() -- only look in the current db AND constraint_name = 'PRIMARY' -- always 'PRIMARY' for PRIMARY KEY constraints AND table_name = '<your-table-name>' -- specify your table. 

Как насчет этого.

 SELECT COLUMN_NAME FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_SCHEMA = 'Your Database' AND TABLE_NAME = 'Your Table name' AND COLUMN_KEY = 'PRI'; SELECT COLUMN_NAME FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_SCHEMA = 'Your Database' AND TABLE_NAME = 'Your Table name' AND COLUMN_KEY = 'UNI'; 

использовать:

 show columns from tablename where `Key` = "PRI"; 

Для подхода PHP вы можете использовать mysql_field_flags

 $q = mysql_query('select * from table limit 1'); for($i = 0; $i < mysql_num_fields(); $i++) if(strpos(mysql_field_tags($q, $i), 'primary_key') !== false) echo mysql_field_name($q, $i)." is a primary key\n"; 

Если вы хотите сгенерировать список первичных ключей динамически через php за один раз, не выполняя каждую таблицу, вы можете использовать

 SELECT TABLE_NAME, COLUMN_NAME FROM INFORMATION_SCHEMA.key_column_usage WHERE table_schema = '$database_name' AND CONSTRAINT_NAME = 'PRIMARY' 

хотя вам нужно иметь доступ к информации.schema для этого.

У меня это получилось, наконец!

 <?php function mysql_get_prim_key($table){ $sql = "SHOW INDEX FROM $table WHERE Key_name = 'PRIMARY'"; $gp = mysql_query($sql); $cgp = mysql_num_rows($gp); if($cgp > 0){ // Note I'm not using a while loop because I never use more than one prim key column $agp = mysql_fetch_array($gp); extract($agp); return($Column_name); }else{ return(false); } } ?> 

Самый короткий код кажется чем-то вроде

 // $dblink contain database login details // $tblName the current table name $r = mysqli_fetch_assoc(mysqli_query($dblink, "SHOW KEYS FROM $tblName WHERE Key_name = 'PRIMARY'")); $iColName = $r['Column_name']; 

Я использую SHOW INDEX FROM table; это дает мне много информации; если ключ уникален, его секвенция в индексе, сортировка, подпункт, если null, его тип и комментарий, если существует, см. скриншот здесь Вот

MySQL имеет SQL-запрос «SHOW INDEX FROM», который возвращает индексы из таблицы. Напр. – в следующем запросе будут показаны все индексы для таблицы продуктов:

 SHOW INDEXES FROM products \G 

Он возвращает таблицу с типом, column_name, Key_name и т. Д. И отображает вывод со всеми индексами и первичными ключами как –

 *************************** 1. row *************************** Table: products Non_unique: 0 Key_name: PRIMARY Seq_in_index: 1 Column_name: product_id Collation: A Cardinality: 0 Sub_part: NULL Packed: NULL Null: Index_type: BTREE Comment: Index_comment: 

Чтобы просто отобразить первичный ключ из таблицы, используйте: –

 SHOW INDEXES FROM table_name WHERE Key_name = 'PRIMARY'