Spec-Zone.ru › MySQL 9.2

Справочник по маркерам версий 7.6.6.4

Следующее обсуждение служит справочником по элементам маркеров версий:

  • Функции маркеров версий

  • Системные переменные маркеров версий

Функции маркеров версий
Примечание

Функции, описанные в этом разделе, реализуются плагином version_tokens, который устарел начиная с MySQL 9.2.0.

Библиотека плагина маркеров версий содержит несколько функций. Один набор функций позволяет управлять и просматривать список маркеров версий сервера. Другой набор функций позволяет блокировать и разблокировать маркеры версий. Для вызова любой функции маркеров версий требуется привилегия VERSION_TOKEN_ADMIN (или устаревшая привилегия SUPER).

Следующие функции позволяют создавать, изменять, удалять и просматривать список маркеров версий сервера. Интерпретация аргументов name_list и token_list (включая обработку пробелов) происходит так, как описано в разделе 7.6.6.3 «Использование маркеров версий», который предоставляет подробности о синтаксисе задания маркеров, а также дополнительные примеры.

  • version_tokens_delete(name_list)

    Удаляет маркеры из списка маркеров версий сервера, используя аргумент name_list, и возвращает двоичную строку, указывающую результат операции. name_list — это список имён маркеров версий, разделённых точкой с запятой, которые необходимо удалить.

    mysql> SELECT version_tokens_delete('tok1;tok3');
    +------------------------------------+
    | version_tokens_delete('tok1;tok3') |
    +------------------------------------+
    | 2 version tokens deleted.          |
    +------------------------------------+
    

    Аргумент NULL обрабатывается как пустая строка, что не оказывает влияния на список маркеров.

    version_tokens_delete() удаляет маркеры, указанные в аргументе, если они существуют. (Удаление несуществующих маркеров не является ошибкой.) Чтобы очистить список маркеров полностью, не зная, какие маркеры в нём находятся, передайте NULL или строку без маркеров в version_tokens_set():

    mysql> SELECT version_tokens_set(NULL);
    +------------------------------+
    | version_tokens_set(NULL)     |
    +------------------------------+
    | Version tokens list cleared. |
    +------------------------------+
    mysql> SELECT version_tokens_set('');
    +------------------------------+
    | version_tokens_set('')       |
    +------------------------------+
    | Version tokens list cleared. |
    +------------------------------+
    
  • version_tokens_edit(token_list)

    Изменяет список маркеров версий сервера, используя аргумент token_list, и возвращает двоичную строку, указывающую результат операции. token_list — это список пар имён/значений маркеров, разделённых точкой с запятой, указывающий имя каждого маркера, подлежащего определению, и его значение. Если маркер существует, его значение обновляется указанным значением. Если маркер не существует, он создаётся с указанным значением. Если аргумент NULL или строка без маркеров, список маркеров остаётся неизменным.

    mysql> SELECT version_tokens_set('tok1=value1;tok2=value2');
    +-----------------------------------------------+
    | version_tokens_set('tok1=value1;tok2=value2') |
    +-----------------------------------------------+
    | 2 version tokens set.                         |
    +-----------------------------------------------+
    mysql> SELECT version_tokens_edit('tok2=new_value2;tok3=new_value3');
    +--------------------------------------------------------+
    | version_tokens_edit('tok2=new_value2;tok3=new_value3') |
    +--------------------------------------------------------+
    | 2 version tokens updated.                              |
    +--------------------------------------------------------+
    
  • version_tokens_set(token_list)

    Заменяет список маркеров версий сервера маркерами, определёнными в аргументе token_list, и возвращает двоичную строку, указывающую результат операции. token_list — это список пар имён/значений маркеров, разделённых точкой с запятой, указывающий имя каждого маркера, подлежащего определению, и его значение. Если аргумент NULL или строка без маркеров, список маркеров очищается.

    mysql> SELECT version_tokens_set('tok1=value1;tok2=value2');
    +-----------------------------------------------+
    | version_tokens_set('tok1=value1;tok2=value2') |
    +-----------------------------------------------+
    | 2 version tokens set.                         |
    +-----------------------------------------------+
    
  • version_tokens_show()

    Возвращает список маркеров версий сервера как двоичную строку, содержащую список пар имён/значений, разделённых точкой с запятой.

    mysql> SELECT version_tokens_show();
    +--------------------------+
    | version_tokens_show()    |
    +--------------------------+
    | tok2=value2;tok1=value1; |
    +--------------------------+
    

Следующие функции позволяют блокировать и разблокировать маркеры версий:

  • version_tokens_lock_exclusive(token_name[, token_name] ..., timeout)

    Получает эксклюзивные блокировки на один или несколько маркеров версий, указанных по имени как строки, с таймаутом, если блокировки не получены в течение заданного значения таймаута.

    mysql> SELECT version_tokens_lock_exclusive('lock1', 'lock2', 10);
    +-----------------------------------------------------+
    | version_tokens_lock_exclusive('lock1', 'lock2', 10) |
    +-----------------------------------------------------+
    |                                                   1 |
    +-----------------------------------------------------+
    
  • version_tokens_lock_shared(token_name[, token_name] ..., timeout)

    Получает общие блокировки на один или несколько маркеров версий, указанных по имени как строки, с таймаутом, если блокировки не получены в течение заданного значения таймаута.

    mysql> SELECT version_tokens_lock_shared('lock1', 'lock2', 10);
    +--------------------------------------------------+
    | version_tokens_lock_shared('lock1', 'lock2', 10) |
    +--------------------------------------------------+
    |                                                1 |
    +--------------------------------------------------+
    
  • version_tokens_unlock()

    Освобождает все блокировки, полученные в текущей сессии с помощью version_tokens_lock_exclusive() и version_tokens_lock_shared().

    mysql> SELECT version_tokens_unlock();
    +-------------------------+
    | version_tokens_unlock() |
    +-------------------------+
    |                       1 |
    +-------------------------+
    

Функции блокировки обладают следующими характеристиками:

  • Значение возвращаемого значения не равно нулю при успехе. В противном случае возникает ошибка.

  • Имена маркеров — строки.

  • В отличие от обработки аргументов для функций, манипулирующих списком маркеров сервера, пробелы вокруг аргументов имени маркера не игнорируются, и разрешены символы = и ;.

  • Можно блокировать несуществующие имена маркеров. Это не создаёт маркеры.

  • Значения таймаута — целые числа, неотрицательные, представляющие время ожидания в секундах для получения блокировок, прежде чем таймаут вызовет ошибку. Если таймаут равен 0, ожидания нет, и функция выдаёт ошибку, если блокировки не могут быть получены немедленно.

  • Функции блокировки маркеров версий основаны на службе блокировки, описанной в разделе 7.6.9.1 «Служба блокировки».

Переменные системы токенов версий
Примечание

Переменные системы, описанные в этом разделе, реализованы плагином version_tokens, который устарел в MySQL 9.2.0.

Токены версий поддерживают следующие переменные системы. Эти переменные недоступны, если плагин Токены версий не установлен (см. Раздел 7.6.6.2, «Установка или удаление токенов версий»).

Переменные системы:

  • version_tokens_session

    Формат командной строки --version-tokens-session=value
    Устарело Да
    Переменная системы version_tokens_session
    Область действия Глобальная, сессия
    Динамическая Да
    Применяется подсказка SET_VAR Нет
    Тип Строка
    Значение по умолчанию NULL

    Значение сессии этой переменной задаёт список токенов клиента и указывает на те токены, которые клиентская сессия требует для списка токенов сервера.

    Если переменная version_tokens_session имеет значение NULL (значение по умолчанию) или пустое значение, любой список токенов сервера соответствует. (По сути, пустое значение отключает требования сопоставления.)

    Если переменная version_tokens_session имеет ненулевое значение, любое несоответствие между её значением и списком токенов сервера приводит к ошибке для любого оператора, отправляемого сессией на сервер. Несоответствие возникает в следующих случаях:

    • Имя токена в значении version_tokens_session отсутствует в списке токенов сервера. В этом случае возникает ошибка.

    • Значение токена в значении version_tokens_session отличается от значения соответствующего токена в списке токенов сервера. В этом случае возникает ошибка.

    Не является несоответствием, если список токенов сервера включает токен, не указанный в значении version_tokens_session.

    Предположим, что приложение управления установило список токенов сервера следующим образом:

    mysql> SELECT version_tokens_set('tok1=a;tok2=b;tok3=c');
    +--------------------------------------------+
    | version_tokens_set('tok1=a;tok2=b;tok3=c') |
    +--------------------------------------------+
    | 3 version tokens set.                      |
    +--------------------------------------------+
    

    Клиент регистрирует токены, которые требуются ему для соответствия серверу, установив значение version_tokens_session. Затем для каждого последующего оператора, отправленного клиентом, сервер проверяет свой список токенов по отношению к значению version_tokens_session клиента и выводит ошибку, если есть несоответствие:

    mysql> SET @@SESSION.version_tokens_session = 'tok1=a;tok2=b';
    mysql> SELECT 1;
    +---+
    | 1 |
    +---+
    | 1 |
    +---+
    
    mysql> SET @@SESSION.version_tokens_session = 'tok1=b';
    mysql> SELECT 1;
    ERROR 3136 (42000): Version token mismatch for tok1. Correct value a
    

    Первый SELECT выполняется успешно, потому что токены клиента tok1 и tok2 присутствуют в списке токенов сервера, и каждое значение токена в списке сервера такое же. Второй SELECT терпит неудачу, потому что, хотя tok1 присутствует в списке токенов сервера, его значение отличается от значения, указанного клиентом.

    В этот момент любой оператор, отправленный клиентом, терпит неудачу, если список токенов сервера не изменится таким образом, чтобы снова соответствовать. Предположим, что приложение управления изменяет список токенов сервера следующим образом:

    mysql> SELECT version_tokens_edit('tok1=b');
    +-------------------------------+
    | version_tokens_edit('tok1=b') |
    +-------------------------------+
    | 1 version tokens updated.     |
    +-------------------------------+
    mysql> SELECT version_tokens_show();
    +-----------------------+
    | version_tokens_show() |
    +-----------------------+
    | tok3=c;tok1=b;tok2=b; |
    +-----------------------+
    

    Теперь значение version_tokens_session клиента соответствует списку токенов сервера, и клиент снова может успешно выполнить операторы:

    mysql> SELECT 1;
    +---+
    | 1 |
    +---+
    | 1 |
    +---+
    
  • version_tokens_session_number

    Формат командной строки --version-tokens-session-number=#
    Устарело Да
    Переменная системы version_tokens_session_number
    Область действия Глобальная, сессия
    Динамическая Нет
    Применяется подсказка SET_VAR Нет
    Тип Целое число
    Значение по умолчанию 0

    Эта переменная предназначена для внутреннего использования.

© 2025 Oracle
Licensed under the GPLv2 License.
https://docs.oracle.com/cd/E17952_01/mysql-9.2-en/version-tokens-reference.html

Spec-Zone.ru

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