Получить правильный последний идентификатор из таблицы
Как я могу сделать SQL-запрос в PDO, чтобы узнать следующий идентификатор? Я проверил $sql->lastInsertId()
а также SELECT LAST_INSERT_ID() FROM my_table
но в соответствии с этим последний идентификатор равен 116, когда последний идентификатор равен 66 в моей таблице.
Заранее спасибо!
4 ответа
Было бы select max(lastID) from my_table
Работа? (Предполагается, что имя столбца, содержащего последний созданный идентификатор, называется lastID)
LAST_INSERT_ID()
возвращает последний идентификатор, который был вставлен с автоинкрементацией. Фактически с тех пор записи могут быть удалены (может быть, все они из 67-116), но это не меняет позицию автоинкремента, и следующий идентификатор будет 117.
Если вы хотите узнать, какой самый большой идентификатор в вашей таблице, то SELECT max(id) FROM table
могу помочь тебе.
Я надеюсь убедить вас передумать
- Не нужно знать следующий идентификатор
- нет способа узнать, что будет дальше.
Идентификатор - это просто абстрактное значение, случайно напоминающее число. Его цель - быть уникальным. Это означает, что никакие значения не должны использоваться повторно. Таким образом, это всегда должен быть новый идентификатор.
Вот почему ваша база данных составляет 116, а не 66.
Вот почему вы должны довольствоваться 116, не заставляя его быть 66
Не говоря уже о том, что оба lastInsertId()
а также SELECT LAST_INSERT_ID()
гарантированно будет правильным значением, в то время как принят принятый ответ, который предлагает использовать max(lastID)
не является.
Если у вас есть автоинкремент в столбце идентификатора, следующий идентификатор не всегда last item's ID + 1
, Поэтому, если вы вставите два элемента (идентификаторы 1 и 2), удалите второй и снова вставите новый, его идентификатор будет 3, а не 2, но это также зависит от вашего механизма БД.
Но если вы хотите получить идентификатор последнего элемента, вы можете, например, упорядочить столбец по убыванию идентификатора и выбрать идентификатор первого элемента.