2012-04-23 3 views
3

У меня есть таблица mysql с полем автоматического приращения. Я использую счетчик автоматического инкремента как генератор идентификатора по базе данных.mysql auto increment без вставки

Мне нужен способ увеличить счетчик, получить новый номер, но без ввода каких-либо данных.

Легко ли это сделать?

+1

Что вы подразумеваете, говоря, что вы используете счетчик автоматического приращения как «генератор идентификаторов через базу данных»? – Daan

+0

@Daan Я использую идентификаторы из этой таблицы в качестве первичных ключей на других таблицах. – applechief

+0

Что именно ваш прецедент, если вы не против совместного использования? Я не могу себе представить, что нет лучшего способа сделать то, что вы хотите сделать, не используя счетчик автоматического приращения и откаты :) – Daan

ответ

2

Если вы используете его как генератор идентификаторов, то (помимо изменения таблицы) вам нужно будет вставить что-то, чтобы получить следующее значение.

Самый простой способ сделать это без вставки каких-либо данных - сделать INSERT, а затем позвонить LAST_INSERT_ID, а затем выдать ROLLBACK. Это приведет к откату вставки, но следующий идентификатор все равно будет увеличен.

+0

На самом деле, использование движка 'blackhole' будет самым легким, если я не ошибаюсь :) –

+1

ROLLBACK возможно только в том случае, если движок хранения InnoDB.Я думаю, что он может выдавать DELETE FROM после LAST_INSERT_ID. Это будет более общий способ. – rkosegi

+0

@ N.B. - Казалось бы, но двигатель черной дыры не поддерживает состояние значения auto_increment, поэтому, хотя вы можете поместить его на стол черной дыры, они выглядят бесполезными. –

0

Используйте этот запрос, чтобы получить статус таблицы

SHOW TABLE STATUS LIKE 'table_name' 

Там будет поле Auto_increment значением, которое вы хотите

Использование PHP для извлечения значения

$result = mysql_query("SHOW TABLE STATUS LIKE 'table_name'"); 
$row = mysql_fetch_assoc($result); 
$nextAutoIncrement = $row['Auto_increment']; 
+0

Но это на самом деле не увеличит таблицу, в следующий раз, когда я вложу запись, я получу тот же идентификатор, что и я, искусственно увеличенный. нет? – applechief

-1

Я думаю, вы хотите изменить таблицу, чтобы вы могли использовать ее

ALTER TABLE table_name AUTO_INCREMENT = id+1 

Здесь идентификатор будет вашим полем автоматического увеличения. Но поля Auto-increment увеличиваются относительно максимального значения в этом столбце.

+1

Примечание: Выполнение таблицы изменений * не * транзактивно в mysql. Любые существующие транзакции будут совершены путем изменения таблицы, так как это не рекомендуется для этого. – Ian