2012-06-19 14 views
6

En PHP, ¿cómo obtengo el nombre de campo del campo que se ha configurado para que aumente automáticamente cuando se agrega una nueva grabación?¿Cómo puedo obtener el nombre de campo de incremento automático o el nombre de campo de la clave principal de una tabla mysql?

En la mayoría de los casos, es lo mismo que PRIMARY_KEY de la tabla, pero no necesariamente siempre.

Así que esta pregunta tiene 2 partes y la segunda se divide en una tercera parte.

1- ¿Cómo obtener el nombre del nombre del campo de incremento automático ...

2- Cómo obtener el nombre del nombre del campo primary_key ...

2.1 ¿Cómo obtener el primary_key (s) información cuando una tabla utiliza más de un campo como su clave principal ...

Respuesta

2

Puede obtener la información de la tabla usando el SHOW COLUMNS FROM table. Algo como esto:

$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']; 
} 
+1

muestra columnas de tablename donde Extra = 'autoincremento' – ling

2

Puede obtener esa información utilizando el comando SHOW COLUMNS. More info

Ejemplo: Supongamos que tiene una tabla llamada Ciudad. La consulta para ver los atributos de la tabla serían:

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  |    | 
+------------+----------+------+-----+---------+----------------+ 

Esto es de http://dev.mysql.com/doc/refman/5.0/en/show-columns.html

+0

He votado positivamente esta respuesta si realmente incluyó el comando para obtener la información solicitada por el OP. – JohnFx

+0

@JohnFx Ejemplo agregado. –

+0

upvote añadido. =) – JohnFx

2

Puede consultar la base de datos information_schema:

SELECT column_name, column_key, extra 
FROM information_schema.columns 
WHERE table_schema=DATABASE() AND table_name='tablename'; 
  • la column_key consistirá en el tipo de clave, es decir, PRI, MUL, etc.
  • ElLa columnacontendrá auto_increment para la columna de incremento automático.

Tenga en cuenta que la base de datos information_schema es "global" por lo que siempre debe pasar la base de datos correspondiente (ya sea específicamente o por medio de DATABASE() para la base de datos actual) y mesa, de lo contrario se termina con un conjunto de resultados grande.

6

si desea obtener la columna de clave principal de la tabla, puede utilizar este código:

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 

Para obtener el campo auto-incrementa, intente esto:

SELECT Auto_increment 
FROM information_schema.tables 
WHERE table_name = 'tbName' 
    AND table_schema = DATABASE(); 
+0

al consultar la tabla information_schema, use innodb_stats_on_metadata = 0 para tener un mejor rendimiento: https://www.percona.com/blog/2011/12/23/solving-information_schema-slowness/ – ling

Cuestiones relacionadas