SQLite中有效的表名是什么?


74

要使SQLite中的表名称有效的字符组合是什么?所有字母数字组合(AZ,az和0-9)是否构成有效名称?

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

字母数字与破折号“-”和点号“。”的组合也有效吗?

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

谢谢。

Answers:


93

我没有找到参考,但是在不使用方括号的情况下有效的表名应该是任何不以数字开头的字母数字组合:

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)

使用方括号,您应该几乎可以使用任何东西作为表名:

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

只是另一个后续问题。括号规则也适用于列名吗?例如,SELECT * FROM myTable WHERE [column.name] = 1;
大卫2010年

1
括号不是某种报价吗?例如“ abc-abc”也应该起作用。
dashesy

1
@dashesy:是的,应该可以。可以使用的报价取决于数据库及其设置。
Guffa 2014年

2
我发现名字'transaction'在sqlite3中不能是有效的表名:sqlite> create table transaction(id integer primary key); 错误:“交易”附近:语法错误
Kedar Mhaswade

1
@KedarMhaswade:是的,有一些保留的关键字,您必须在不加引号的情况下将它们用作标识符,因为它们被识别为关键字而不是标识符。
Guffa

29

所有这些都被允许,但是您可能必须在中引用它们""

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

通常,您应该坚持字母。


2
双引号是标准的引号机制,而不是方括号-sqlite.org/lang_keywords.html
Neil

是的,SQLite在处理具有“创建表交易...”以对“银行交易”进行建模的教程时抱怨,这是因为“交易”是关键字“不能用作表,索引的名称,列,数据库,用户定义的函数,排序规则,虚拟表模块或任何其他命名的对象”-从您的链接!
Kedar Mhaswade

6

sqliteens用户邮件列表上的Per Clemens:

允许所有内容,但以“ sqlite_”开头的名称除外。

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

您可以使用关键字(“ TABLE”),特殊字符(“”#!@“”'☺\“)甚至空字符串(”“)。


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.