2012-06-19 2 views
6

В PHP, как мне получить имя поля поля, которое было установлено как автоматическое приращение, когда к нему добавляется новый rec?Как я могу получить имя автоматического увеличения или имя поля первичного ключа из таблицы mysql?

В большинстве случаев это то же самое, что и PRIMARY_KEY таблицы, но необязательно всегда.

Таким образом, этот вопрос состоит из двух частей, второй из которых относится к третьей части.

1- Как получить имя имя поля автоинкрементным ...

2- Как получить имя имя primary_key поля ...

2,1 Как получить primary_key (ы), когда таблица использует в качестве основного ключа более одного поля ...

ответ

2

Вы можете получите информацию таблицы, используя SHOW COLUMNS FROM table. Что-то вроде этого:

$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

показать столбцы из tablename, где Extra = 'автоматическое приращение' – ling

2

Вы можете получить эту информацию, используя команду SHOW COLUMNS. More info

Пример: Предположим, у вас есть таблица под названием Город. Запрос, чтобы увидеть атрибуты таблиц будут:

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

Это из http://dev.mysql.com/doc/refman/5.0/en/show-columns.html

+0

Я бы поднял этот ответ, если вы действительно включили команду для получения информации, которую запросил ОП. – JohnFx

+0

@JohnFx Пример добавлен. –

+0

upvote добавлен. =) – JohnFx

2

Вы можете запросить information_schema базы данных:

SELECT column_name, column_key, extra 
FROM information_schema.columns 
WHERE table_schema=DATABASE() AND table_name='tablename'; 
  • column_key будет состоять из ключевого типа, т.е. PRI, MUL и т. д.
  • extra будет содержать auto_increment для столбца автоматического увеличения.

Обратите внимание, что база данных information_schema является «глобальным», так что вы всегда должны пройти соответствующую базу данных (либо конкретно, либо через DATABASE() для текущей базы данных) и таблица, в противном случае вы в конечном итоге с большим набором результатов.

6

, если вы хотите, чтобы получить столбец первичного ключа таблицы, вы можете использовать этот код:

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 

Чтобы получить автоинкрементное поле, попробуйте следующее:

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

при запросе таблицы information_schema, используйте innodb_stats_on_metadata = 0, чтобы иметь лучшие характеристики: https://www.percona.com/blog/2011/12/23/solving-information_schema-slowness/ – ling

Смежные вопросы