Задавайте вопросы, мы ответим
Вы не зашли.
Здравствуйте. Вопрос заключается в следующем - необходимо получить ID последней строки таблицы. Однако выбор максимального ID для решения данной проблемы не подходит, поскольку после очистки таблицы данная функция вернет не верный ответ. Вариант с тем, чтобы при ошибке запроса добавить строку, взять ее ID, потом удалить эту строку не хотлось бы использовать, чтобы не нагружать БД. Что можете посоветовать? Спасибо.
Неактивен
Как правило, в таких задачах Вам не нужен ID, который выдастся когда-то, а
нужен ID, который получился после вставки строки. Для этих целей можно
воспользоваться функциями API (например, mysql_insert_id() в PHP) или
функцией MySQL LAST_INSERT_ID().
Получать следующий ID плохо, так как между получением ID и добавлением
строки может прийти другой клиент и вставить строку.
Неактивен
Базой данных пользуется одновременно только один клиент. Описанные Вами методы не подходят, так как мне нужно получить ID именно перед добавлением строки, потому что мне нужно использовать этот ID при добавлении других записей в другую таблицу, а в данную таблицу я добавляю запись позже...
Неактивен
Почему не добавить запись сначала сюда, а потом в другие таблицы?
В любом случае, хорошего способа нет. Можете, например, смотреть значение
автоинкремента из метаданных:
SELECT AUTO_INCREMENT
FROM INFORMATION_SCHEMA.TABLES
WHERE TABLE_SCHEMA='dbname' AND TABLE_NAME='tablename'
Но я всё еще считаю, что лучше соблюдать порядок. Так, чтобы когда появится
второй клиент, — не было проблем. Ну или избавьтесь от автоинкремента вообще,
и добавляйте числа вручную.
Неактивен
Не могу добавить запись сначала в эту таблицу, потому что информация формируется в процессе анализа данных, которые записываются в другую таблицу, а в них в свою очередь надо указать ID данной таблицы... Но я уже так понимаю, что наверное все таки придется пересмотреть данный процесс...
Неактивен
Сделайте тогда табличку с одной строкой, в которой инкрементируйте
значение — в любом случае тогда будет страховка от многопоточности.
Неактивен
Я все таки сделал, что при ошибки получения максимального значения ID функцией "SELECT MAX(iID) FROM [TouchkeyReads]", я добавляю строку, считываю ее ID и удаляю... Такая операция происходит редко, так как таблица будет чиститься редко, а в остальное время получаю ID по "SELECT MAX...". Многопоточности 100% не будет
Неактивен