2012-06-19 7 views
6

W PHP, w jaki sposób uzyskać nazwę pola, które zostało ustawione jako automatyczne przyrosty po dodaniu nowego rekordu?Jak mogę uzyskać nazwę pola automatycznie inkrementującego lub nazwę pola klucza głównego z tabeli mysql?

W większości przypadków jest taki sam jak PRIMARY_KEY tabeli, ale niekoniecznie zawsze.

Pytanie to składa się z 2 części, z których druga dzieli się na 3 część.

1- Jak uzyskać nazwę nazwą autoinkrementacja pola ...

2- Jak uzyskać nazwę primary_key nazwy pola ...

2.1 Jak uzyskać primary_key (s) informacje, gdy tabela używa więcej niż jednego pola jako klucza głównego ...

Odpowiedz

2

Można uzyskać informacje o tabeli za pomocą SHOW COLUMNS FROM table. Coś w tym stylu:

$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

wyświetlaj kolumny z nazwy tabeli, gdzie Extra = "auto_increment" – ling

2

Możesz uzyskać te informacje, używając polecenia SHOW COLUMNS. More info

Przykład: Załóżmy, że masz stół o nazwie Miasto. Zapytanie zobaczyć atrybuty tabeli byłoby:

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

To z http://dev.mysql.com/doc/refman/5.0/en/show-columns.html

+0

Chciałbym przegłosować tę odpowiedź, jeśli rzeczywiście włączyłeś polecenie, aby uzyskać informacje, o które poprosił OP. – JohnFx

+0

@JohnFx Dodano przykład. –

+0

dodano upvote. =) – JohnFx

2

Można kwerendy information_schema bazy danych:

SELECT column_name, column_key, extra 
FROM information_schema.columns 
WHERE table_schema=DATABASE() AND table_name='tablename'; 
  • column_key będzie składać się z klucza typu, tj. PRI, MUL, itp.
  • TheKolumnabędzie zawierać auto_increment dla kolumny automatycznego przyrostu.

Należy zauważyć, że baza danych information_schema jest „globalny”, więc trzeba zawsze przejść odpowiednią bazę danych (albo specjalnie lub poprzez DATABASE() dla bieżącej bazy danych) i tabeli, w przeciwnym razie możesz skończyć z dużym zestaw wyników.

6

jeśli chcesz uzyskać kolumnę klucza podstawowego tabeli, można użyć tego kodu:

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 

Aby uzyskać pole automatycznego zwiększana, spróbuj tego:

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

podczas wysyłania zapytania do tabeli information_schema, użyj innodb_stats_on_metadata = 0, aby uzyskać lepszą wydajność: https://www.percona.com/blog/2011/12/23/solving-information_schema-slowness/ – ling