在 PHP 中,如何获取已设置为在添加新记录时自动递增的字段的字段名称?
在大多数情况下,它与表的 PRIMARY_KEY 相同,但不一定总是如此。
所以这个问题有两部分,第二部分分为第三部分。
1-如何获取自动递增字段名称的名称...
2-如何获取primary_key字段名称的名称...
2.1 表使用多个字段作为主键时如何获取primary_key(s)信息...
在 PHP 中,如何获取已设置为在添加新记录时自动递增的字段的字段名称?
在大多数情况下,它与表的 PRIMARY_KEY 相同,但不一定总是如此。
所以这个问题有两部分,第二部分分为第三部分。
1-如何获取自动递增字段名称的名称...
2-如何获取primary_key字段名称的名称...
2.1 表使用多个字段作为主键时如何获取primary_key(s)信息...
如果要获取表的主键列,可以使用以下代码:
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();
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'];
}
您可以使用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
可以查询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 结果集。