Дополнительные функции MySQL
LAST_INSERT_ID()
LAST_INSERT_ID(выражение)
Возвращает последнее автоматически сгенерированное значение, которое было вставлено в столбец AUTO_INCREMENT.
mysql> SELECT LAST_INSERT_ID(); -> 195
Последний идентификатор, который был сгенерирован, поддерживается на сервере на основе соединений. Это означает, что значение, возвращаемое клиенту, соответствует последнему сгенерированному значению AUTO_INCREMENT в сеансе данного клиента. Оно никак не может быть затронуто другими клиентами, равно как не требует блокировок или транзакций.
Значение, возвращаемое LAST_INSERT_ID() не изменяется, если вы обновляете столбец AUTO_INCREMENT в строке не с помощью "магических" значений (то есть, не NULL и не 0 ).
Если вы вставляете много строк одним оператором, LAST_INSERT_ID() возвращает значение для первой вставленной строки. Цель этого состоит в том, чтобы облегчить воспроизведение того же оператора INSERT на другом сервере.
Если указан аргумент выражение, значение аргумента возвращается функцией и запоминается как следующее значение, которое LAST_INSERT_ID() вернет при следующем вызове. Это можно использовать для эмуляции последовательностей:
- Создать таблицу для хранения счетчика последовательности и инициализировать его:
mysql> CREATE TABLE sequence (id INT NOT NULL); mysql> INSERT INTO sequence VALUES(0);
- Использовать таблицу для генерации последовательности чисел:
mysql> UPDATE sequence SET id=LAST_INSERT_ID(id+l); mysql> SELECT LAST_INSERT_ID();
Оператор UPDATE увеличивает счетчик последовательности и заставляет следующий вызов LAST_INSERT_ID() возвращать измененное значение.
Вы можете генерировать последовательности без вызова LAST_INSERT_ID(), но польза от ее применения заключается в том, что значение идентификатора поддерживается сервером как последнее автоматически сгенерированное значение.
Это обеспечивает безопасное использование в многопользовательской среде, поскольку множество клиентов могут отправлять операторы UPDATE и получать свои собственные значения последовательности через оператор SELECT (или mysql_insert_id() ), никак не влияя и не подвергаясь влиянию других клиентов, для которых генерируются их собственные значения последовательности.
USER()
SESSION_USER()
SYSTEM_USER()
Возвращает имя текущего пользователя MySQL и имя хоста, с которого он подключился.
mysql> SELECT USER(); -> 'davida@localhost'
Значение представляет имя пользователя, которое было указано во время подключения к серверу, и имя компьютера-хоста, с которого произошло подключение. Возвращаемое значение может отличаться от того, которое выдает CURRENT_USER().
Вы можете извлечь имя пользователя, независимо от того, включает ли значение имя хоста или нет, следующим образом:
mysql> SELECT SUBSTRING_INDEX(USER(),'@',1); -> 'davida'
VERSION()
Возвращает строку, содержащую информацию о версии сервера MySQL:
mysql > SELECT VERSION(); -> '4.1.2-alpha-log'
Следует отметить, что если строка версии заканчивается на '-log', это означает, что регистрация в журнале включена.