2012-06-19 24 views
6

Wie erhalte ich in PHP den Feldnamen des Felds, das als automatisches Inkrement festgelegt wurde, wenn ein neues rec hinzugefügt wird?Wie kann ich den automatisch inkrementierenden Feldnamen oder den Primärschlüssel Feldname aus einer MySQL-Tabelle erhalten?

In den meisten Fällen ist es das gleiche wie die PRIMARY_KEY der Tabelle aber nicht unbedingt immer.

Also diese Frage hat zwei Teile mit der zweiten in einen dritten Teil Verzweigung.

1- Wie der Name des Feld mit automatischer Erhöhung Namen bekommen ...

2- Wie der Name des primary_key Feldnamen bekommen ...

2.1 Wie die primary_key erhalten (e) Informationen, wenn eine Tabelle mehr als ein Feld als Primärschlüssel verwendet ...

Antwort

2

Sie können Holen Sie sich die Tabelle Informationen mit der SHOW COLUMNS FROM table. So etwas wie das:

$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

zeigen Spalten von Tabellennamen, wo extra = 'auto_increment' – ling

2

Sie diese Informationen mithilfe des SHOW COLUMNS Befehl erhalten können. More info

Beispiel: Angenommen, Sie eine Tabelle mit dem Namen der Stadt haben. Die Abfrage zu sehen, die Tabellenattribute sein würde:

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

Dies ist von http://dev.mysql.com/doc/refman/5.0/en/show-columns.html

+0

Ich würde diese Antwort upvote, wenn Sie tatsächlich den Befehl enthalten, um die Informationen zu erhalten, die das OP verlangt. – JohnFx

+0

@JohnFx Beispiel hinzugefügt. –

+0

upvote hinzugefügt. =) – JohnFx

2

Sie die information_schema Datenbank abfragen können:

SELECT column_name, column_key, extra 
FROM information_schema.columns 
WHERE table_schema=DATABASE() AND table_name='tablename'; 
  • Die column_key der Schlüsseltyp bestehen, PRI dh MUL usw.
  • Die extra-Spalte enthält auto_increment für die Autoinkrement-Spalte.

Beachten Sie, dass die information_schema Datenbank „global“ ist, so dass Sie immer die entsprechende Datenbank (entweder ausdrücklich oder über DATABASE() für die aktuelle Datenbank) und Tabelle passieren muss, sonst enden Sie mit einem großen Ergebnismenge auf.

6

, wenn Sie die Primärschlüsselspalte der Tabelle erhalten möchten, können Sie diesen Code verwenden:

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 

Um die automatische erhöht Feld zu bekommen, versuchen Sie dies:

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

wenn die information_schema Tabelle abzufragen, verwendet innodb_stats_on_metadata = 0 bessere Leistungen zu haben: https://www.percona.com/blog/2011/12/23/solving-information_schema-slowness/ – ling

Verwandte Themen