При проектировании базы данных часто используется суррогатный ключ, чтобы генерировать уникальные целочисленные значения для столбца первичного ключа с помощью атрибута AUTO_INCREMENT .
Это значит, что при вставке в таблицу новой строки, которая имеет столбец AUTO_INCREMENT , MySQL автоматически генерирует уникальное целое число и использует его для этого столбца.
Вы можете получить сгенерированный порядковый номер с помощью функции MySQL INSERT_ID и использовать его для следующих операций, например, для вставки новой строки в связанную таблицу.
Пример MySQL LAST_INSERT_ID
Давайте рассмотрим пример использования функции MySQL LAST_INSERT_ID .
Создадим новую таблицу для тестирования под названием tbl . В таблице tbl установим атрибут AUTO_INCREMENT для столбца id :
Затем вставим новую строку в таблицу tbl :
Воспользуемся функцией MySQL LAST_INSERT_ID для получения идентификатора последней вставленной строки, который был сгенерирован MySQL .
Важно отметить, что если вставить несколько строк в таблицу с помощью одного оператора INSERT , то функция LAST_INSERT_ID вернет идентификатор первой вставленной строки.
Предположим, столбец AUTO_INCREMENT имеет текущее значение 1 , и вы вставляете три строки в таблицу. Когда вы примените функцию LAST_INSERT_ID , то получите значение 2 вместо 4 .
Следующее выражение вставляет три строки в таблицу tbl и получает идентификатор последней вставки с помощью функции LAST_INSERT_ID .
Проверим данные таблицы tbl :
Функция LAST_INSERT_ID работает независимо от клиента. Это значит, что значение, возвращаемое функцией LAST_INSERT_ID для отдельного клиента, является значением, сгенерированным только этим клиентом. Благодаря этому каждый пользователь получает свой собственный уникальный идентификатор.
В этой статье мы показали, как использовать функцию MySQL LAST_INSERT_ID для получения порядкового номера последней строки, добавленной в таблицу.
Данная публикация представляет собой перевод статьи « MySQL LAST_INSERT_ID Function » , подготовленной дружной командой проекта Интернет-технологии.ру
I have a MySQL question that I think must be quite easy. I need to return the LAST INSERTED ID from table1 when I run the following MySql query:
As you can understand the current code will just return the LAST INSERT ID of table2 instead of table1, how can I get the id from table1 even if I insert into table2 between?
10 Answers 10
You could store the last insert id in a variable :
Or get the max id frm table1
Since you actually stored the previous LAST_INSERT_ID() into the second table, you can get it from there:
This enables you to insert a row into 2 different tables and creates a reference to both tables too.
I had the same problem in bash and i’m doing something like this:
which works fine:-) But
don’t work. Because after the first command, the shell will be logged out from mysql and logged in again for the second command, and then the variable @last_insert_id isn’t set anymore. My solution is:
Maybe someone is searching for a solution an bash 🙂
For no InnoDB solution: you can use a procedure don’t forgot to set the the delimiter for storing the procedure with ;
And you can use it.
It would be possible to save the last_id_in_table1 variable into a php variable to use it later?
With this last_id I need to attach some records in another table with this last_id, so I need:
1) Do an INSERT and get the last_id_in_table1
2) For any indeterminated rows in another table, UPDATING these rows with the last_id_insert generated in the insert.
Базы данных
В этом учебном пособии вы узнаете, как использовать MySQL функцию LAST_INSERT_ID с синтаксисом и примерами.
Описание
MySQL функция LAST_INSERT_ID возвращает первое значение AUTO_INCREMENT, которое было установлено с помощью самой последней инструкции INSERT или UPDATE, которая повлияла на столбец AUTO_INCREMENT.
Синтаксис
Синтаксис MySQL функции LAST_INSERT_ID:
Параметры или аргументы
expression — необязательный. Если указано expression , значение возвращается LAST_INSERT_ID и запоминается как следующее значение, которое должно быть возвращено функцией LAST_INSERT_ID.
Примечание
- Если в последнем операторе INSERT или UPDATE задано более одного значения AUTO_INCREMENT, функция LAST_INSERT_ID возвращает только первое значение AUTO_INCREMENT.
- Функция LAST_INSERT_ID возвращает последнее значение AUTO_INCREMENT для каждого клиента, поэтому оно возвращает только последнее значение AUTO_INCREMENT для вашего клиента. Это значение не может быть затронуто другими клиентами.
- Выполнение функции LAST_INSERT_ID не влияет на значение, возвращаемое LAST_INSERT_ID.
Применение
Функция LAST_INSERT_ID может использоваться в следующих версиях MySQL:
- MySQL 5.7, MySQL 5.6, MySQL 5.5, MySQL 5.1, MySQL 5.0, MySQL 4.1, MySQL 4.0, MySQL 3.23
Пример
Рассмотрим примеры MySQL функции LAST_INSERT_ID, чтобы понять, как использовать функцию LAST_INSERT_ID в MySQL.
Например, если бы у нас была следующая таблица suppliers с AUTO_INCREMENT полем supplier_id :