Spec-Zone.ru › MariaDB

ПРЕДЫДУЩЕЕ ЗНАЧЕНИЕ ДЛЯ sequence_name

MariaDB, начиная с 10.3

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
Содержимое, воспроизведенное на этом сайте, является собственностью соответствующих владельцев, и это содержимое не проходит предварительной проверки MariaDB. Мнения, информация и мнения, выраженные в этом содержании, не обязательно отражают мнения MariaDB или любой другой стороны.

© 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/

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API