如何从 mysql 表中获取自动递增字段名称或主键字段名称?
Posted
技术标签:
【中文标题】如何从 mysql 表中获取自动递增字段名称或主键字段名称?【英文标题】:How can I get the auto incrementing field name or the primary key fieldname from a mysql table? 【发布时间】:2012-06-21 01:27:03 【问题描述】:在 php 中,如何获取已设置为在添加新记录时自动递增的字段的字段名称?
在大多数情况下,它与表的 PRIMARY_KEY 相同,但不一定总是如此。
所以这个问题有 2 个部分,第二个部分分为第三部分。
1-如何获取自增字段名...
2-如何获取primary_key字段名...
2.1 表使用多个字段作为主键时如何获取primary_key(s)信息...
【问题讨论】:
【参考方案1】:如果要获取表的主键列,可以使用这段代码:
SELECT k.COLUMN_NAME
FROM information_schema.table_constraints t
LEFT JOIN information_schema.key_column_usage k
USING(constraint_name,table_schema,table_name)
WHERE t.constraint_type='PRIMARY KEY'
AND t.table_schema=DATABASE()
AND t.table_name='tbName'; -- the name of your table
要获取自动递增的字段,请尝试以下操作:
SELECT Auto_increment
FROM information_schema.tables
WHERE table_name = 'tbName'
AND table_schema = DATABASE();
【讨论】:
查询information_schema表时,使用innodb_stats_on_metadata=0可以获得更好的性能:percona.com/blog/2011/12/23/solving-information_schema-slowness 返回auto_increment列名的语句实际上返回了auto_increment值,因此没有回答问题。【参考方案2】:您可以使用SHOW COLUMNS FROM table
获取表信息。像这样的:
$res = $mysqli->query('SHOW COLUMNS FROM tablename');
while($row = $res->fetch_assoc())
if ($row['Extra'] == 'auto_increment')
echo 'Field with auto_increment = '.$row['Field'];
if ($row['Key'] == 'PRI')
echo 'Field with primary key = '.$row['Field'];
【讨论】:
显示 Extra='auto_increment' 的表名中的列【参考方案3】:可以查询information_schema
数据库:
SELECT column_name, column_key, extra
FROM information_schema.columns
WHERE table_schema=DATABASE() AND table_name='tablename';
column_key
将由密钥类型组成,即PRI
、MUL
等。
extra
列将包含 auto_increment
用于自动增量列。
请注意,information_schema
数据库是“全局”的,因此您必须始终传递相应的数据库(具体地或通过 DATABASE()
用于当前数据库)和表,否则您最终会得到一个大的结果集。
【讨论】:
【参考方案4】:您可以使用SHOW COLUMNS
命令获取这些信息。 More info
示例:假设您有一个名为 City 的表。查看表属性的查询是:
mysql> SHOW COLUMNS FROM City;
...And the result:
+------------+----------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+------------+----------+------+-----+---------+----------------+
| Id | int(11) | NO | PRI | NULL | auto_increment |
| Name | char(35) | NO | | | |
| Country | char(3) | NO | UNI | | |
| District | char(20) | YES | MUL | | |
| Population | int(11) | NO | | 0 | |
+------------+----------+------+-----+---------+----------------+
这是来自http://dev.mysql.com/doc/refman/5.0/en/show-columns.html
【讨论】:
如果您实际上包含了获取 OP 要求的信息的命令,我会赞成这个答案。以上是关于如何从 mysql 表中获取自动递增字段名称或主键字段名称?的主要内容,如果未能解决你的问题,请参考以下文章