2012-06-19 4 views
6

In PHP, come ottengo il nome del campo del campo che è stato impostato come incremento automatico quando viene aggiunto un nuovo rec.Come posso ottenere il nome del campo auto incrementale o il nome di campo della chiave primaria da una tabella mysql?

Nella maggior parte dei casi, è uguale a PRIMARY_KEY della tabella ma non necessariamente sempre.

Quindi questa domanda ha 2 parti con la seconda diramazione in una terza parte.

1- Come ottenere il nome del nome del campo incremento automatico ...

2- Come ottenere il nome del nome del campo primary_key ...

2.1 Come ottenere il primary_key (s) informazioni quando una tabella utilizza più di un campo come chiave primaria ...

risposta

2

Puoi ottenere le informazioni della tabella utilizzando SHOW COLUMNS FROM table. Qualcosa del genere:

$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

mostra colonne da tablename dove Extra = 'Incremento automatico' – ling

2

È possibile ottenere tali informazioni utilizzando il comando SHOW COLUMNS. More info

Esempio: supponiamo di avere un tavolo denominato City. La query per vedere gli attributi tabella sarebbe:

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

Questo è da http://dev.mysql.com/doc/refman/5.0/en/show-columns.html

+0

Avrei passato questa risposta se in realtà includessi il comando per ottenere le informazioni richieste dall'OP. – JohnFx

+0

@JohnFx Esempio aggiunto. –

+0

aggiunto in eccesso. =) – JohnFx

2

È possibile interrogare il database information_schema:

SELECT column_name, column_key, extra 
FROM information_schema.columns 
WHERE table_schema=DATABASE() AND table_name='tablename'; 
  • Il column_key consisterà del tipo di chiave, cioè PRI, MUL, ecc.
  • La colonnaconterrà auto_increment per la colonna di incremento automatico.

Nota che il database information_schema è "globale", così si deve sempre passare il rispettivo database (in modo specifico o tramite DATABASE() per il database corrente) e tavolo, altrimenti si finisce con un set di risultati BIG.

6

se si vuole ottenere la colonna chiave primaria della tabella, è possibile utilizzare questo codice:

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 

Per ottenere il campo auto-increment, provate questo:

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

quando si esegue una query sulla tabella information_schema, utilizzare innodb_stats_on_metadata = 0 per ottenere prestazioni migliori: https://www.percona.com/blog/2011/12/23/solving-information_schema-slowness/ – ling

Problemi correlati