SQLinfo.ru - Все о MySQL Webew.ru: теория и практика веб-технологий

Форум пользователей MySQL

Задавайте вопросы, мы ответим

Вы не зашли.

#1 25.01.2011 16:09:33

ILYA INDIGO
Участник
Зарегистрирован: 25.01.2011
Сообщений: 3

Значение счётчика AUTO_INCREMENT в MyISAM

Мне нужно узнать значение счётчика автоинкрементирования, которое будет присвоено полю ДО ввода в это поле, что бы использовать его в другом поле этой же таблицы. Т.е. `id`=5 (его вставит автоинкремент), а `file`='5 - file_name' То что `id` будет равным 5-ти я должен знать ДО запроса INSERT, что бы я в этом запросе подставил его значение (5-ку) в поле `file`.
Команда LAST_INSERT_ID() или LAST_INSERT_ID(id) мне никоем образом НЕ подходит, так как это просто аналог SELECT `id` FROM table_name ORDER BY `id` DESC LIMIT 1 и всё. Использовать это значение +1 казалось бы логично, но не факт что счётчик автоинкремента содержит значение именно значение, на единицу большего, чем последнее значение id.
Например я добавил 10 записей, а потом удалил 2 последних и LAST_INSERT_ID()+1 вернёт мне 9, хотя автоинкремент мне добавит 11.
Если с помощью команды ALTER TABLE `DB_name`.`Table_name` AUTO_INCREMENT=8; Его можно установить, например в 8, то должна же быть комманда, которая выводит значение именно этого счётчика, а не просто значение последнего введёного поля. В MySQL Query Brouser это значение отображается, но какой команндой выводится НЕ известно. http://xmages.net/storage/10/1/0/b/0/thumb/thumb_53a8acb4.png

Отредактированно ILYA INDIGO (25.01.2011 16:11:48)

Неактивен

 

#2 25.01.2011 17:22:11

ILYA INDIGO
Участник
Зарегистрирован: 25.01.2011
Сообщений: 3

Re: Значение счётчика AUTO_INCREMENT в MyISAM

О smile)) SHOW TABLE STATUS LIKE 'jos_akula_catalog' Действительно содержит поле Auto_increment с нужным мне значением, но он так же содержит и то что мне НЕ нужно в данный момент.
А каким оброзом написать запрос так, что бы я увидел на выходе только это число, точнее только одно поле Auto_increment с нужным мне значением ?

Неактивен

 

#3 25.01.2011 18:48:01

ILYA INDIGO
Участник
Зарегистрирован: 25.01.2011
Сообщений: 3

Re: Значение счётчика AUTO_INCREMENT в MyISAM

Из раздела смам спросил - сам ответил...

Хух таки родил функцию...
function file_id()
{
$query = 'SHOW TABLE STATUS WHERE `Name`=\''.$this->table.'\'';
return ($res = $this->db->assoc($query)) ?$res[0]->Auto_increment :false;
}

Хотелось бы сделать красивый запрос, что бы вместо res[0]->Auto_increment сразу можно было возвращать res[0], ну сойдёт и так.

А вот с чем собственно я мучался так долго... в Joomla все таблицы содержат префикс jos_ по умолчанию, который зачем то кому то можно изменить, и я для автоподставления использовал запись:
var $table = '#__akula_catalog'; который потом заменяет #_ на jos. И я думал долго как лучше прописывать имена таблиц с jos_ или с #__. А вот запрос SHOW TABLE STATUS WHERE `Name`='#__akula_catalog' У меня выдавал всё время false, хотя в квери браузере и в консоли он выполнялся удачно, и после ручной замены #_ на  jos у меня таки заработало, так что одним вопросом меньше smile)

Неактивен

 

#4 25.01.2011 20:23:03

Shopen
Гуру
Откуда: Москва
Зарегистрирован: 22.10.2007
Сообщений: 362

Re: Значение счётчика AUTO_INCREMENT в MyISAM

По моему вы изначально поставили перед собой неправильно задачу. Зачем вам в базе такие значения - '5 - file_name'?
Пишите просто 'file_name', а когда нужно будет достать сделаете SELECT CONCAT(id,' - ',file) WHERE ... и никаких танцев с бубном, к тому же по полю 'file' будет возможность искать по индексу если понадобится (в вашем случае индекс в пролете).

Отредактированно Shopen (25.01.2011 20:28:37)

Неактивен

 

#5 25.01.2011 20:37:33

paulus
Администратор
MySQL Authorized Developer and DBA
Зарегистрирован: 22.01.2007
Сообщений: 6757

Re: Значение счётчика AUTO_INCREMENT в MyISAM

+1 к Shopen.

Никогда нет смысла угадывать, что выдастся. Выдастся, да не Вам. Прийдет другой
поток и заберет этот ID. А Вы на его базе уже построили какую-то логику.

Если не хотите заполнять основную таблицу — сделайте табличку генерации ID,
генерируйте в ней, а потом работайте с этим числом. Это уже будет безопаснее. Вам
всегда нужна точка сериализации запросов.

Неактивен

 

Board footer

Работает на PunBB
© Copyright 2002–2008 Rickard Andersson