Имена идентификаторов
Базы данных, таблицы, индексы, столбцы, псевдонимы, представления, хранимые процедуры, триггеры, события, переменные, разделы, табличные пространства, точки сохранения, метки, пользователи, роли — все они вместе называются идентификаторами и подчиняются определенным правилам именования.
Идентификаторы могут быть заключены в обратные кавычки — `. Заключение в кавычки необязательно для идентификаторов, не содержащих специальных символов, или для идентификаторов, которые не являются зарезервированными словами. Если флаг 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)
© 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/