如何获取表的主键?

时间:2010-02-26 11:41:46

标签: php mysql primary-key

有没有办法从mysql-database获取主键字段的名称?例如:

我有一张这样的表:

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

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

14 个答案:

答案 0 :(得分:105)

更好的方法是使用SHOW KEYS,因为您并不总是可以访问information_schema。以下作品:

SHOW KEYS FROM table WHERE Key_name = 'PRIMARY'

Column_name将包含主键的名称。

答案 1 :(得分:25)

这是主键列名称

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

答案 2 :(得分:14)

SELECT key_column_usage.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.

答案 3 :(得分:7)

这个怎么样。

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

答案 4 :(得分:5)

使用:

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

答案 5 :(得分:4)

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

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

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

答案 6 :(得分: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";

答案 7 :(得分:1)

我终于得到了它!

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

?>

答案 8 :(得分:1)

最短的代码似乎是

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

答案 9 :(得分:0)

我使用SHOW INDEX FROM表;它给了我很多信息;如果密钥是唯一的,它在索引中的序列,整理,子部分,如果为null,其类型和注释(如果存在),请参见此处的屏幕截图here

答案 10 :(得分:0)

MySQL有一个SQL查询&#34; SHOW INDEX FROM&#34;它从表中返回索引。 例如。 - 以下查询将显示products表的所有索引: -

SHOW INDEXES FROM products \G

它返回一个包含type,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'

答案 11 :(得分:0)

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

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

答案 12 :(得分:0)

您应使用key_column_usage.constraint_name = "PRIMARY"中的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";

答案 13 :(得分:0)

startActivityForResult()

我建议您注意所有字段