How can I get the auto incrementing field name or the primary key fieldname from a mysql table?

半世苍凉 提交于 2019-12-04 22:16:39

问题


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 contain auto_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

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!