什么是 SQLite 中的有效表名?

SQLite 中表名的字符组合有效吗?所有字母数字的组合(A-Z,A-Z 和0-9)是否构成有效的名称?

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

如果把字母数字和破折号“-”和句号“ .”组合在一起,也是有效的吗?

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

谢谢你。

52879 次浏览

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

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

不过,一般来说,你应该坚持使用字母表。

我还没有找到它的引用,但是如果表名有效而不使用括号,那么它应该是任何不以数字开头的字母数字组合:

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!?]

在 SQLite 关于 CREATETABLE 的文档中,只有那些以 sqlite_开头的名称被禁止:

以“ sqlite _”开头的表名称保留给内部使用。试图创建名称以“ sqlite _”开头的表是错误的。

每个 sqlite 用户邮件列表上的 Clemens:

除了以“ sqlite _”开头的名称之外,其他内容都是允许的。

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

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

如果在名称中使用句点,则 SQL 查询将出现问题。所以我会说,避免这些。