在 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”或附加数据库的模式名称。与其他 SQL 标识符一样,模式名称不区分大小写。如果指定了模式名称,则只会在该模式中搜索命名对象。
大多数对象引用可能只解析为特定类型的对象(例如,作为 DROP TABLE 语句一部分的引用可能只解析为表对象,而不是索引、触发器或视图)。然而在某些上下文中(例如REINDEX)一个对象引用可能被解析为不止一种类型的对象。在为命名对象搜索数据库模式时,始终忽略不能在引用上下文中使用的类型的对象。