Подтвердить что ты не робот

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

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

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

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

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

4b9b3361

Ответ 1

Лучше всего использовать SHOW KEYS, так как у вас не всегда есть доступ к информации_схемы. Следующие работы:

SHOW KEYS FROM table WHERE Key_name = 'PRIMARY'

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

Ответ 2

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

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';

Ответ 3

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.

Ответ 4

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

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';

Ответ 5

использование:

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

Ответ 6

Для 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";

Ответ 7

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

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

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

Ответ 8

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

<?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);
}
}

?>

Ответ 9

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

// $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']; 

Ответ 10

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

Ответ 11

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

SHOW INDEXES FROM products \G

Он возвращает таблицу с типом, имя_столбца, имя_таблицы и т.д. и отображает вывод со всеми индексами и первичными ключами как -

*************************** 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'