В этом учебном пособии вы узнаете, как использовать 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:
1 2 3 4 |
CREATE TABLE suppliers ( supplier_id INT AUTO_INCREMENT NOT NULL PRIMARY KEY, supplier_name VARCHAR(50) NOT NULL, website VARCHAR(50) ); |
И таблица suppliers содержала следующие записи:
supplier_id | supplier_name | website |
---|---|---|
1 | google_user | google.com |
2 | yandex_user | yandex.ru |
3 | mail_user | mail.ru |
И мы выполнили следующий оператор INSERT:
1 2 3 4 |
INSERT INTO suppliers (supplier_name, website) VALUES ('Oracle_user', 'oracle.com'); |
Таблица suppliers теперь выглядит так:
supplier_id | supplier_name | website |
---|---|---|
1 | google_user | google.com |
2 | yandex_user | yandex.ru |
3 | mail_user | mail.ru |
4 | Oracle_user | oracle.com |
И если мы выполним функцию LAST_INSERT_ID следующим образом:
1 2 |
mysql> SELECT LAST_INSERT_ID(); 4 |
Функция LAST_INSERT_ID вернет 4, поскольку последний оператор INSERT вставил запись в таблицу suppliers с supplier_id (то есть: значение AUTO_INCREMENT), равным 4.
Воздействие на несколько значений AUTO_INCREMENT
Рассмотрим, как будет вести себя функция LAST_INSERT_ID, если последний INSERT установит более одного значения AUTO_INCREMENT. Другими словами, что произойдет, если мы вставим 2 записи нашим последним оператором INSERT.
Давайте еще раз посмотрим на таблицу suppliers с AUTO_INCREMENT полем supplier_id:
1 2 3 |
CREATE TABLE suppliers ( supplier_id INT AUTO_INCREMENT NOT NULL PRIMARY KEY, supplier_name VARCHAR(50) NOT NULL ); |
И таблица suppliers содержит следующие записи:
supplier_id | supplier_name | website |
---|---|---|
1 | google_user | google.com |
2 | yandex_user | yandex.ru |
3 | mail_user | mail.ru |
4 | Oracle_user | oracle.com |
У нас также есть таблица customers со следующими записями:
customer_id | customer_name |
---|---|
1 | HP |
2 | Samsung |
И мы выполним следующий оператор INSERT, который использует предложение SELECT для вставки более чем одной записи в таблицу suppliers:
1 2 3 4 5 |
INSERT INTO suppliers (supplier_name) SELECT customer_name FROM customers ORDER BY customer_id; |
После выполнения оператора INSERT таблица suppliers теперь будет выглядеть так:
supplier_id | supplier_name | website |
---|---|---|
1 | google_user | google.com |
2 | yandex_user | yandex.ru |
3 | mail_user | mail.ru |
4 | Oracle_user | oracle.com |
5 | HP | null |
6 | Samsung | null |
Как вы можете видеть, оператор INSERT вставил 2 новых записи в таблицу suppliers (supplier_id = 5 и supplier_id = 6).
Теперь, когда мы выполняем функцию LAST_INSERT_ID следующим образом:
1 2 3 |
mysql> SELECT LAST_INSERT_ID(); #Результат: 5 |
Функция LAST_INSERT_ID вернет 5, потому что запись с supplier_id = 5 была первым значением AUTO_INCREMENT, которое будет установлено самым последним оператором INSERT.