ПРЕДЫДУЩЕЕ ЗНАЧЕНИЕ ДЛЯ sequence_name
SEQUENCE были введены в MariaDB 10.3.
Синтаксис
PREVIOUS VALUE FOR sequence_name
или
LASTVAL(sequence_name)
или в режиме Oracle (SQL_MODE=ORACLE)
sequence_name.currval
PREVIOUS VALUE FOR — синтаксис IBM DB2, а LASTVAL() — синтаксис PostgreSQL.
Описание
Получение последнего значения, сгенерированного последовательностью в текущем соединении.
- Если последовательность еще не использовалась в соединении,
PREVIOUS VALUE FORвозвращаетNULL(то же самое относится к новому соединению, которое не видит последнего значения для существующей последовательности). - Если последовательность была удалена и повторно создана, то она рассматривается как новая последовательность, и
PREVIOUS VALUE FORвернётNULL. -
FLUSH TABLESне влияет наPREVIOUS VALUE FOR. - Предыдущие значения всех использованных последовательностей хранятся в рамках каждого соединения до его завершения.
-
PREVIOUS VALUE FORтребует привилегии SELECT.
Пример
CREATE SEQUENCE s START WITH 100 INCREMENT BY 10; SELECT PREVIOUS VALUE FOR s; +----------------------+ | PREVIOUS VALUE FOR s | +----------------------+ | NULL | +----------------------+ # The function works for sequences only, if the table is used an error is generated SELECT PREVIOUS VALUE FOR t; ERROR 4089 (42S02): 'test.t' is not a SEQUENCE # Call the NEXT VALUE FOR s: SELECT NEXT VALUE FOR s; +------------------+ | NEXT VALUE FOR s | +------------------+ | 100 | +------------------+ SELECT PREVIOUS VALUE FOR s; +----------------------+ | PREVIOUS VALUE FOR s | +----------------------+ | 100 | +----------------------+
Теперь попробуйте начать новое соединение и убедитесь, что последнее значение по-прежнему NULL, прежде чем обновить значение в новом соединении после того, как новое соединение получит текущее значение (110 в примере ниже). Обратите внимание, что первое соединение не может увидеть это изменение, и результат последнего значения по-прежнему остаётся тем же (100 в примере выше).
$ .mysql -uroot test -e"SELECT PREVIOUS VALUE FOR s; SELECT NEXT VALUE FOR s; SELECT PREVIOUS VALUE FOR s;" +----------------------+ | PREVIOUS VALUE FOR s | +----------------------+ | NULL | +----------------------+ +------------------+ | NEXT VALUE FOR s | +------------------+ | 110 | +------------------+ +----------------------+ | PREVIOUS VALUE FOR s | +----------------------+ | 110 | +----------------------+
См. также
- Обзор последовательностей
- СОЗДАТЬ ПОСЛЕДОВАТЕЛЬНОСТЬ
- ИЗМЕНИТЬ ПОСЛЕДОВАТЕЛЬНОСТЬ
- СЛЕДУЮЩЕЕ ЗНАЧЕНИЕ ДЛЯ
- SETVAL(). Установка следующего значения для последовательности.
- AUTO_INCREMENT
© 2023 MariaDB
Licensed under the Creative Commons Attribution 3.0 Unported License and the GNU Free Documentation License.
https://mariadb.com/kb/en/previous-value-for-sequence_name/