Database Object Name Resolution
SQL As Understood By SQLite
[Top]
数据库对象名称解析
在 SQLite 中,数据库对象(表,索引,触发器或视图)由对象的名称和它驻留的数据库的名称来标识。数据库对象可以驻留在主数据库,临时数据库或附加的数据库。
DROP TABLE,DROP INDEX,DROP VIEW,DROP TRIGGER,REINDEX,ALTER TABLE 和许多其他命令的语法都允许用户单独指定数据库对象,或者通过其名称和它的数据库。如果没有将数据库指定为对象引用的一部分,那么 SQLite 会搜索主数据库,临时数据库和所有连接的数据库以查找具有匹配名称的对象。首先搜索临时数据库,然后搜索主数据库,然后按照它们附加的顺序跟随所有附加数据库。参考解析为找到的第一个匹配项。例如:
/* Add a table named 't1' to the temp, main and an attached database */
ATTACH 'file.db' AS aux;
CREATE TABLE t1(x, y
CREATE TEMP TABLE t1(x, y
CREATE TABLE aux.t1(x, y
DROP TABLE t1; /* Drop table in temp database */
DROP TABLE t1; /* Drop table in main database */
DROP TABLE t1; /* Drop table in aux database */
如果将模式名称指定为对象引用的一部分,则它必须是 “main” 或 “temp” 或附加数据库的 schema-name。像其他 SQL 标识符一样,模式名称不区分大小写。如果指定了模式名称,那么只有那一个模式被搜索到指定的对象。
大多数对象引用只能解析为特定类型的对象(例如,作为 DROP TABLE 语句一部分的引用可能只能解析为表对象,而不是索引,触发器或视图)。但是在某些情况下(例如 REINDEX),对象引用可能会解析为多种类型的对象。在为数据库模式搜索命名对象时,总是忽略不能在引用上下文中使用的类型对象。