Gli identificatori

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)

Commenti

Sto caricando i commenti......
Content reproduced on this site is the property of its respective owners, and this content is not reviewed in advance by MariaDB. The views, information and opinions expressed by this content do not necessarily represent those of MariaDB or any other party.