Gli identificatori
Contents
I nomi dei database, delle tabelle, degli indici, delle colonne, degli alias, delle viste, delle Stored Procedure, delle partizioni, dei tablespace, sono tutti noti come identificatori e devono seguire certe regole.
Gli identificatori possono essere virgolettati con il carattere backtick - #`#. Virgolettarli è opzionale se l'identificatore non contiene caratteri speciali e non è una parola riservata.
Da non virgolettare
I caratteri validi sono i seguenti, e gli identificatori composti solo da questi non hanno bisogno di essere virgolettati:
- ASCII: [0-9,a-z,A-Z$_] (cifre 0-9,caratteri latini di base, sia maiuscoli che minuscoli, segno del dollaro, underscore)
- Estesi: U+0080 .. U+FFFF
Da virgolettare
I seguenti caratteri sono validi, ma gli identificatori che li usano devono essere virgolettati:
- ASCII: U+0001 .. U+007F (Unicode Basic Multilingual Plane (BMP)completo, escluso U+0000)
- Estesi: U+0080 .. U+FFFF
- Le virgolette possono essere usate come parte dell'identificatore, purché siano anch'esse virgolettate.
Altre regole
Vi sono altre regole:
- Gli identificatori vengono registrati in Unicode (UTF-8)
- Potrebbero non essere case-sensitive. Si veda Indentifier Case-sensitivity.
- I nomi dei database, delle tabelle e delle colonne non possono terminare con un carattere di spazio
- Gli identificatori possono iniziale con una cifra, ma non possono contenere cifre a meno che non siano virgolettati.
- Gli identificatori non possono contenere il carattere ASCII NUL (U+0000) e caratteri supplementari (U+10000 e più alti).
- I nomi come 5e6, 9e non sono proibili, ma si raccomanda caldamente di non usarli, perché possono introdurre ambiguità in alcuni contesti, perché potrebbero essere trattati come numeri o espressioni.
- Le variabili utente non possono essere utilizzate come parti di un identificatore, né come identificatore completo, in una istruzione SQL.
Carattere per le virgolette
Normalmente il carattere per virgolettare gli identificatori è il backtick - #`#, ma se l'opzione ANSI_QUOTES
dell'SQL_MODE è attiva, è anche possibile usare le virgolette doppie - #"#..
Lunghezza massima
- I nomi dei database, delle tabelle, delle colonne, degli indici, dei constrint, delle Stored Routine, dei Trigger, degli Eventi, delle viste, dei tablespaces, dei server e dei gruppi dei file di log hanno una lunghezza massima di 64 caratteri.
- Le etichette delle istruzioni composte hanno una lunghezza massima di 16 caratteri.
- Gli alias hanno una lunghezza massima di 256 caratteri, eccetto gli alias delle colonne nelle istruzioni CREATE VIEW, che devono avere lo stesso limite delle colonne, cioè 64 caratteri (che è inferiore ai 256 degli alias).
- I caratteri multi-byte contano come uno, ai fini della lunghezza massima.
Identificatori multipli
MariaDB permette che i nomi delle colonne siano usati da soli se il riferimento non è ambgiguo, o che siano usati insieme al nome della tabella, o insieme a quello della tabella e quello del database. Per separare gli identificatori si usa un punto, e il punto può essere circondato da spazi.
Esempi
Usare un punto per separare gli identificatori:
MariaDB [test]> 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 | +------+
Il punto può essere circondato da spazi:
SELECT test . t1 . i FROM t1; +------+ | i | +------+ | 10 | +------+
Eliminare l'ambiguità:
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 | +------+
Creare una tabella con caratteri che richiedono le virgolette:
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)
Usare le virgolette doppie:
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)
Usare le virgolette degli identificatori come parte del nome:
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)