7

在 PHP 中,如何获取已设置为在添加新记录时自动递增的字段的字段名称?

在大多数情况下,它与表的 PRIMARY_KEY 相同,但不一定总是如此。

所以这个问题有两部分,第二部分分为第三部分。

1-如何获取自动递增字段名称的名称...

2-如何获取primary_key字段名称的名称...

2.1 表使用多个字段作为主键时如何获取primary_key(s)信息...

4

4 回答 4

6

如果要获取表的主键列,可以使用以下代码:

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();  
于 2012-06-19T02:48:34.907 回答
3

You can get the table information using the SHOW COLUMNS FROM table. Something like this:

$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'];
}
于 2012-06-19T02:54:53.237 回答
2

您可以使用SHOW COLUMNS命令获取这些信息。 更多信息

示例:假设您有一个名为 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

于 2012-06-19T02:42:06.783 回答
2

可以查询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()当前数据库)表,否则您最终会得到一个 BIG 结果集。

于 2012-06-19T02:46:32.817 回答