SQLinfo.ru - Все о MySQL

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

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

Вы не зашли.

#1 18.01.2011 16:40:55

System_linK
Участник
Зарегистрирован: 18.01.2011
Сообщений: 4

Получить ID строки после очистки таблицы

Здравствуйте. Вопрос заключается в следующем - необходимо получить ID последней строки таблицы. Однако выбор максимального ID для решения данной проблемы не подходит, поскольку после очистки таблицы данная функция вернет не верный ответ. Вариант с тем, чтобы при ошибке запроса добавить строку, взять ее ID, потом удалить эту строку не хотлось бы использовать, чтобы не нагружать БД. Что можете посоветовать? Спасибо.

Неактивен

 

#2 18.01.2011 17:22:53

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

Re: Получить ID строки после очистки таблицы

Как правило, в таких задачах Вам не нужен ID, который выдастся когда-то, а
нужен ID, который получился после вставки строки. Для этих целей можно
воспользоваться функциями API (например, mysql_insert_id() в PHP) или
функцией MySQL LAST_INSERT_ID().

Получать следующий ID плохо, так как между получением ID и добавлением
строки может прийти другой клиент и вставить строку.

Неактивен

 

#3 18.01.2011 18:54:29

System_linK
Участник
Зарегистрирован: 18.01.2011
Сообщений: 4

Re: Получить ID строки после очистки таблицы

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

Неактивен

 

#4 18.01.2011 19:21:58

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

Re: Получить ID строки после очистки таблицы

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

В любом случае, хорошего способа нет. Можете, например, смотреть значение
автоинкремента из метаданных:
SELECT AUTO_INCREMENT
FROM INFORMATION_SCHEMA.TABLES
WHERE TABLE_SCHEMA='dbname' AND TABLE_NAME='tablename'

Но я всё еще считаю, что лучше соблюдать порядок. Так, чтобы когда появится
второй клиент, — не было проблем. Ну или избавьтесь от автоинкремента вообще,
и добавляйте числа вручную.

Неактивен

 

#5 18.01.2011 22:42:05

System_linK
Участник
Зарегистрирован: 18.01.2011
Сообщений: 4

Re: Получить ID строки после очистки таблицы

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

Неактивен

 

#6 19.01.2011 14:25:40

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

Re: Получить ID строки после очистки таблицы

Сделайте тогда табличку с одной строкой, в которой инкрементируйте
значение — в любом случае тогда будет страховка от многопоточности.

Неактивен

 

#7 19.01.2011 14:36:49

System_linK
Участник
Зарегистрирован: 18.01.2011
Сообщений: 4

Re: Получить ID строки после очистки таблицы

Я все таки сделал, что при ошибки получения максимального значения ID функцией "SELECT MAX(iID) FROM [TouchkeyReads]", я добавляю строку, считываю ее ID и удаляю... Такая операция происходит редко, так как таблица будет чиститься редко, а в остальное время получаю ID по "SELECT MAX...". Многопоточности 100% не будет

Неактивен

 

Board footer

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