Was sind gültige Tabellennamen in SQLite?

73

Welche Zeichenkombination muss für einen Tabellennamen in SQLite gültig sein? Sind alle alphanumerischen Kombinationen (AZ, az und 0-9) ein gültiger Name?

Ex. CREATE TABLE 123abc(...);

Was ist mit einer Kombination aus alphanumerischen Zeichen mit Bindestrichen "-" und Punkten ".", Ist das auch gültig?

Ex. CREATE TABLE 123abc.txt(...);
Ex. CREATE TABLE 123abc-ABC.txt(...);

Vielen Dank.

David
quelle

Antworten:

93

Ich habe keine Referenz dafür gefunden, aber Tabellennamen, die gültig sind, ohne Klammern zu verwenden, sollten eine alphanumerische Kombination sein, die nicht mit einer Ziffer beginnt:

abc123 - valid
123abc - not valid
abc_123 - valid
_123abc - valid
abc-abc - not valid (looks like an expression)
abc.abc - not valid (looks like a database.table notation)

Mit Klammern sollten Sie so ziemlich alles als Tabellennamen verwenden können:

[This should-be a_valid.table+name!?]
Guffa
quelle
Nur eine weitere Folgefrage. Würde die Klammerregel auch für Spaltennamen gelten? Zum Beispiel SELECT * FROM myTable WHERE [Spaltenname] = 1;
David
1
Sind Klammern keine Zitate? zB sollte "abc-abc" auch funktionieren.
Bindestrich
1
@dashesy: ​​Ja, das sollte funktionieren. Was Sie zum Zitieren verwenden können, hängt von der Datenbank und ihren Einstellungen ab.
Guffa
2
Ich finde, dass der Name 'Transaktion' in sqlite3 kein gültiger Tabellenname sein kann: sqlite> create table transaction (ID Integer Primärschlüssel); Fehler: in der Nähe von "Transaktion": Syntaxfehler
Kedar Mhaswade
1
@KedarMhaswade: Ja, es gibt reservierte Schlüsselwörter, die Sie nicht als Bezeichner verwenden können, ohne sie in Anführungszeichen zu setzen, da sie als Schlüsselwort und nicht als Bezeichner erkannt werden.
Guffa
28

All dies ist erlaubt, aber Sie müssen sie möglicherweise in zitieren "".

sqlite> CREATE TABLE "123abc"(col);
sqlite> CREATE TABLE "123abc.txt"(col);
sqlite> CREATE TABLE "123abc-ABC.txt"(col);
sqlite> select tbl_name from sqlite_master;
123abc
123abc.txt
123abc-ABC.txt

Im Allgemeinen sollten Sie sich jedoch an das Alphabet halten.

Matthew Flaschen
quelle
2
Doppelte Anführungszeichen sind der Standard-Anführungszeichenmechanismus, keine eckigen Klammern - sqlite.org/lang_keywords.html
Neil
Richtig, SQLite hat sich beschwert, als es sich um ein Tutorial handelte, das "Tabellentransaktion erstellen ..." zum Modellieren einer "Banktransaktion" hatte, und das lag daran, dass "Transaktion" ein Schlüsselwort ist, das möglicherweise nicht als Namen von Tabellen, Indizes usw. verwendet wird. Spalten, Datenbanken, benutzerdefinierte Funktionen, Kollatierungen, virtuelle Tabellenmodule oder andere benannte Objekte - über Ihren Link!
Kedar Mhaswade
6

Per Clemens auf der Mailingliste der SQLite-Benutzer:

Alles ist erlaubt, außer Namen, die mit "sqlite_" beginnen.

CREATE TABLE "TABLE"("#!@""'☺\", "");

Sie können Schlüsselwörter ("TABLE"), Sonderzeichen ("" #! @ "" '☺ \ ") und sogar die leere Zeichenfolge (" ") verwenden.

eric.mcgregor
quelle
6

In der SQLite- Dokumentation zu CREATE TABLE sind nur folgende Namen verboten sqlite_:

Tabellennamen, die mit "sqlite_" beginnen, sind für den internen Gebrauch reserviert. Es ist ein Fehler, zu versuchen, eine Tabelle mit einem Namen zu erstellen, der mit "sqlite_" beginnt.

Wirawan Purwanto
quelle