2010-09-12 11 views
53

Jaka jest kombinacja znaków dla nazwy tabeli w SQLite, aby była ważna? Czy wszystkie kombinacje znaków alfanumerycznych (A-Z, a-z i 0-9) stanowią poprawną nazwę?Jakie są prawidłowe nazwy tabel w SQLite?

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

Co kombinacji znaków alfanumerycznych z kresek „-” „” i okresy, że jest ważny, jak również?

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

Dziękuję.

Odpowiedz

70

nie znalazłem odniesienie do niego, ale nazwy tabel, które są ważne bez użycia nawiasów wokół nich powinny być dowolną kombinacją alfanumeryczną, który nie rozpoczyna się od cyfry:

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) 

ze wspornikami powinieneś być w stanie wykorzystać prawie wszystko jako nazwa tabeli:

[This should-be a_valid.table+name!?] 
+0

Kolejny pytanie uzupełniające. Czy reguła dotycząca nawiasów odnosiła się również do nazw kolumn? Na przykład SELECT * FROM myTable WHERE [column.name] = 1; – David

+0

@ David: Nie wiem na pewno o SQLite, ale we wszystkich innych bazach danych, których używałem, możesz używać takich nazw kolumn. – Guffa

+0

dzięki, wypróbuję to. – David

23

Wszystkie z nich są dozwolone, ale być może będziesz musiał podać je w "".

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 

Generalnie jednak należy trzymać się alfabetu.

+2

Podwójne cudzysłowy są standardowy mechanizm cytowania, a nie nawiasy kwadratowe - https://www.sqlite.org/lang_keywords.html – Neil

+0

Dobrze, SQLite skarżyło się podczas pracy z samouczkiem, który "utworzył transakcję tabelową", aby modelować "transakcję bankową" i to dlatego, że "transakcja" jest słowem kluczowym ", którego nie można używać jako nazw tabel, indeksów, kolumn, baz danych, funkcji zdefiniowanych przez użytkownika, zestawień, modułów stołów wirtualnych lub innych nazwanych obiektów" - z linku! –

+0

Dzięki, @Neil, zrobione –

3

Od SQLite documentation on CREATE TABLE, tylko nazwy zakazane są te, które zaczynają się sqlite_:

Table names that begin with "sqlite_" are reserved for internal use. It is an error to attempt to create a table with a name that starts with "sqlite_".

0

Per Clemens na liście mailingowej sqlite-users:

Wszystko jest dozwolone, z wyjątkiem nazw rozpoczynających się od "sqlite_".

CREATE TABLE "TABLE"("#[email protected]""'☺\", ""); 

Można użyć słów kluczowych ("stół"), znaków specjalnych ("" #! @ "" "☺ \ "), a nawet pusty ciąg ("").

Powiązane problemy