如何获取表的主键?

问题描述 投票:0回答:14

有没有办法从 mysql 数据库中获取主键字段的名称?例如:

我有一张这样的桌子:

id 姓名
1 Foo1
2 Foo2
3 Foo3

字段 id 是主键的地方(它有自动递增,但我不能使用它)。如何在 php 中检索字段名称“id”?

php mysql primary-key
14个回答
163
投票

更好的方法是使用

SHOW KEYS
,因为您并不总是可以访问 information_schema。以下作品:

SHOW KEYS FROM table WHERE Key_name = 'PRIMARY'

Column_name 将包含主键的名称。


38
投票

这里是主键列名

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

22
投票
SELECT kcu.column_name, kcu.ordinal_position
FROM   information_schema.table_constraints tc
INNER JOIN information_schema.key_column_usage kcu
ON     tc.CONSTRAINT_CATALOG = kcu.CONSTRAINT_CATALOG
AND    tc.CONSTRAINT_SCHEMA = kcu.CONSTRAINT_SCHEMA
AND    tc.CONSTRAINT_NAME = kcu.CONSTRAINT_NAME
WHERE  tc.table_schema = schema()             -- only look in the current schema
AND    tc.constraint_type = 'PRIMARY KEY'
AND    tc.table_name = '<your-table-name>'    -- specify your table.
ORDER BY kcu.ordinal_position

11
投票

使用:

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

9
投票

这个怎么样:

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

7
投票

如果您想通过 PHP 一次性动态生成主键列表,而不必遍历每个表,您可以使用

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

尽管您确实需要访问 information.schema 才能执行此操作。


3
投票

最短的代码似乎是

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

2
投票

对于 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";

2
投票

我终于明白了!

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

?>

0
投票

我使用 SHOW INDEX FROM table ;它给了我很多信息;如果键是唯一的,它在索引中的序列,排序规则,子部分,如果为空,它的类型和评论如果存在,请看这里的截图here


0
投票

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'

0
投票

如果您的数据库中有空间表,请使用:

SHOW KEYS FROM table WHERE Key_name = 'PRIMARY' OR Key_name = 'OGR_FID'

0
投票

你应该使用 PRIMARY 来自

key_column_usage.constraint_name = "PRIMARY"

示例查询,

SELECT k.column_name as PK, concat(tbl.TABLE_SCHEMA, '.`', tbl.TABLE_NAME, '`') as TABLE_NAME
FROM information_schema.TABLES tbl
JOIN information_schema.key_column_usage k on k.table_name = tbl.table_name
WHERE k.constraint_name='PRIMARY'
  AND tbl.table_schema='MYDB'
  AND tbl.table_type="BASE TABLE";

0
投票
SELECT k.column_name
FROM information_schema.key_column_usage k   
WHERE k.table_name = 'YOUR TABLE NAME' AND k.constraint_name LIKE 'pk%'

我建议您观看所有领域

© www.soinside.com 2019 - 2024. All rights reserved.