获取表的主键?
有没有办法从MySQL数据库中获得主键字段的名称? 例如:
我有这样一张桌子:
+----+------+ | id | name | +----+------+ | 1 | Foo1 | | 2 | Foo2 | | 3 | Foo3 | +----+------+
在字段ID是主键(它有自动增量,但我不能使用)。 我如何检索字段名称“身份证”在PHP?
更好的方法是使用SHOW KEYS
因为您并不总是可以访问information_schema。 以下工作:
SHOW KEYS FROM table WHERE Key_name = 'PRIMARY'
Column_name将包含主键的名称。
这是主键列名称
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";
如果你想通过一次性的dynamic生成的主键dynamic列表,而不必跑过你可以使用的每个表
SELECT TABLE_NAME, COLUMN_NAME FROM INFORMATION_SCHEMA.key_column_usage WHERE table_schema = '$database_name' AND CONSTRAINT_NAME = 'PRIMARY'
尽pipe你确实需要访问information.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表; 它给了我很多的信息; 如果关键字是唯一的,则它在索引,整理,子部分,如果为null,其types和注释(如果存在)的后缀,请参见此处的截图
MySQL有一个SQL查询“SHOW INDEX FROM”,它从表中返回索引。 例如。 – 以下查询将显示产品表的所有索引: –
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'