Spec-Zone.ru › MariaDB

Имена идентификаторов

Базы данных, таблицы, индексы, столбцы, псевдонимы, представления, хранимые процедуры, триггеры, события, переменные, разделы, табличные пространства, точки сохранения, метки, пользователи, роли — все они вместе называются идентификаторами и подчиняются определенным правилам именования.

Идентификаторы могут быть заключены в обратные кавычки — `. Заключение в кавычки необязательно для идентификаторов, не содержащих специальных символов, или для идентификаторов, которые не являются зарезервированными словами. Если флаг ANSI_QUOTES SQL_MODE установлен, для заключения идентификаторов также можно использовать двойные кавычки ("). Если установлен флаг MSSQL , для заключения можно использовать квадратные скобки ([ и ]).

Даже когда в качестве имён используются зарезервированные слова, полные имена не обязательно заключать в кавычки. Например, test.select имеет только одно возможное значение, поэтому он правильно парсится даже без кавычек.

Без кавычек

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

  • ASCII: [0-9,a-z,A-Z$_] (цифры 0-9, буквы латинского алфавита, строчные и прописные, знак доллара, знак подчёркивания)
  • Расширенные: U+0080 .. U+FFFF

В кавычках

Следующие символы допустимы, но идентификаторы, использующие их, должны быть заключены в кавычки:

  • ASCII: U+0001 .. U+007F (полная базовая многоязычная плоскость Юникода (BMP) за исключением U+0000)
  • Расширенные: U+0080 .. U+FFFF
  • Кавычки идентификаторов могут сами использоваться в качестве части идентификатора, при условии, что они заключены в кавычки.

Дополнительные правила

Существует ряд других правил для идентификаторов:

  • Идентификаторы хранятся в формате Unicode (UTF-8)
  • Идентификаторы могут быть или не быть чувствительными к регистру. См. Чувствительность к регистру идентификаторов.
  • Имена баз данных, таблиц и столбцов не могут оканчиваться пробелами
  • Имена идентификаторов могут начинаться с цифры, но не могут содержать только цифры, если не заключены в кавычки.
  • Идентификатор, начинающийся с цифры, за которой следует 'e', может быть распарсен как число с плавающей запятой и должен быть заключён в кавычки.
  • Идентификаторы не могут содержать символ ASCII NUL (U+0000) и дополнительные символы (U+10000 и выше).
  • Имена, такие как 5e6, 9e, не запрещены, но их использование крайне не рекомендуется, так как они могут привести к неоднозначности в некоторых контекстах, интерпретируясь как число или выражение.
  • Переменные пользователей не могут использоваться в качестве части идентификатора или как идентификатор в SQL-запросе.

Символ кавычек

Обычный символ кавычек — обратная кавычка — `, но если указан параметр ANSI_QUOTES SQL_MODE, можно использовать также двойные кавычки — ".

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

Максимальная длина

  • Базы данных, таблицы, столбцы, индексы, ограничения, хранимые процедуры, триггеры, события, представления, табличные пространства, сервера и группы файлов журналов имеют максимальную длину 64 символа.
  • Метки составных операторов меток имеют максимальную длину 16 символов.
  • Псевдонимы имеют максимальную длину 256 символов, за исключением псевдонимов столбцов в операторах CREATE VIEW, которые проверяются по максимальной длине столбца 64 символа (а не по максимальной длине псевдонима 256 символов).
  • Пользователи имеют максимальную длину 80 символов.
  • Роли имеют максимальную длину 128 символов.
  • Многобайтовые символы не увеличивают длину сверх лимита символов.

Несколько идентификаторов

MariaDB позволяет использовать имя столбца самостоятельно, если ссылка будет однозначной, или использовать имя таблицы вместе с именем столбца, или все три имени — базы данных, таблицы и столбца. Идентификаторы разделяются точкой, а точка может быть окружена пробелами.

Примеры

Использование точки для разделения идентификаторов:

CREATE TABLE t1 (i int);

INSERT INTO t1(i) VALUES (10);

SELECT i FROM t1;
+------+
| i    |
+------+
|   10 |
+------+

SELECT t1.i FROM t1;
+------+
| i    |
+------+
|   10 |
+------+

SELECT test.t1.i FROM t1;
+------+
| i    |
+------+
|   10 |
+------+

Точка может быть разделена пробелами:

SELECT test . t1 . i FROM t1;
+------+
| i    |
+------+
|   10 |
+------+

Разрешение неоднозначности:

CREATE TABLE t2 (i int);

SELECT i FROM t1 LEFT JOIN t2 ON t1.i=t2.i;
ERROR 1052 (23000): Column 'i' in field list is ambiguous

SELECT t1.i FROM t1 LEFT JOIN t2 ON t1.i=t2.i;
+------+
| i    |
+------+
|   10 |
+------+

Создание таблицы с символами, требующими заключения в кавычки:

CREATE TABLE 123% (i int);
ERROR 1064 (42000): You have an error in your SQL syntax; 
  check the manual that corresponds to your MariaDB server version for the right syntax 
  to use near '123% (i int)' at line 1

CREATE TABLE `123%` (i int);
Query OK, 0 rows affected (0.85 sec)

CREATE TABLE `TABLE` (i int);
Query OK, 0 rows affected (0.36 sec)

Использование двойных кавычек в качестве символа заключения в кавычки:

CREATE TABLE "SELECT" (i int);
ERROR 1064 (42000): You have an error in your SQL syntax; 
  check the manual that corresponds to your MariaDB server version for the right syntax 
  to use near '"SELECT" (i int)' at line 1

SET sql_mode='ANSI_QUOTES';
Query OK, 0 rows affected (0.03 sec)

CREATE TABLE "SELECT" (i int);
Query OK, 0 rows affected (0.46 sec)

Использование символа кавычки идентификатора в качестве части имени идентификатора:

SHOW VARIABLES LIKE 'sql_mode';
+---------------+-------------+
| Variable_name | Value       |
+---------------+-------------+
| sql_mode      | ANSI_QUOTES |
+---------------+-------------+

CREATE TABLE "fg`d" (i int);
Query OK, 0 rows affected (0.34 sec)

Создание таблицы с именем * (код Юникода: U+002A) требует заключения в кавычки.

CREATE TABLE `*` (a INT);

Неоднозначность чисел с плавающей запятой:

CREATE TABLE 8984444cce5d (x INT);
Query OK, 0 rows affected (0.38 sec)

CREATE TABLE 8981e56cce5d (x INT);
ERROR 1064 (42000): You have an error in your SQL syntax; 
  check the manual that corresponds to your MariaDB server version for the right syntax 
  to use near '8981e56cce5d (x INT)' at line 1

CREATE TABLE `8981e56cce5d` (x INT);
Query OK, 0 rows affected (0.39 sec)
Содержимое, воспроизведённое на этом сайте, является собственностью соответствующих владельцев, и это содержимое не предварительно проверяется 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/identifier-names/

Spec-Zone.ru

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