问题
In PHP, how do I get the field name of the field that's been set as to auto increment when a new rec is added to it?
In most cases, it's the same as the PRIMARY_KEY of the table but not necessarily always.
So this question has 2 parts with the second one branching into a 3rd part.
1- How to get the name of the auto-incrementing field name...
2- How to get the name of the primary_key field name...
2.1 How to get the primary_key(s) info when a table uses more than one field as its primary key...
回答1:
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'];
}
回答2:
if you want to get the primary key column of the table, you can use this code:
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
To get the auto-incremented field, try this:
SELECT Auto_increment
FROM information_schema.tables
WHERE table_name = 'tbName'
AND table_schema = DATABASE();
回答3:
You can query the information_schema
database:
SELECT column_name, column_key, extra
FROM information_schema.columns
WHERE table_schema=DATABASE() AND table_name='tablename';
- The
column_key
will consist of the key type, i.e.PRI
,MUL
, etc. - The
extra
column will containauto_increment
for the auto increment column.
Note that the information_schema
database is "global" so you must always pass the respective database (either specifically or via DATABASE()
for the current database) and table, otherwise you end up with a BIG result set.
回答4:
You can get those info by using the SHOW COLUMNS
command. More info
Example: Say you have a table named City. The query to see the table attributes would be:
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 | |
+------------+----------+------+-----+---------+----------------+
This is from http://dev.mysql.com/doc/refman/5.0/en/show-columns.html
来源:https://stackoverflow.com/questions/11093650/how-can-i-get-the-auto-incrementing-field-name-or-the-primary-key-fieldname-from