首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Database Object Name Resolution

[Top]

数据库对象名称解析

在 SQLite 中,数据库对象(表,索引,触发器或视图)由对象的名称和它驻留的数据库的名称来标识。数据库对象可以驻留在主数据库,临时数据库或附加的数据库。

DROP TABLE,DROP INDEX,DROP VIEW,DROP TRIGGER,REINDEX,ALTER TABLE 和许多其他命令的语法都允许用户单独指定数据库对象,或者通过其名称和它的数据库。如果没有将数据库指定为对象引用的一部分,那么 SQLite 会搜索主数据库,临时数据库和所有连接的数据库以查找具有匹配名称的对象。首先搜索临时数据库,然后搜索主数据库,然后按照它们附加的顺序跟随所有附加数据库。参考解析为找到的第一个匹配项。例如:

代码语言:javascript
复制
      /* 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),对象引用可能会解析为多种类型的对象。在为数据库模式搜索命名对象时,总是忽略不能在引用上下文中使用的类型对象。

扫码关注腾讯云开发者

领取腾讯云代金券

http://www.vxiaotou.com