SQL中View重启PC后是否留存?及View与临时表的行为咨询
关于SQL视图(View)与临时表的行为差异解答
核心问题说明
你创建的普通SQL视图是持久化的数据库对象,它的查询定义会存在数据库的系统元数据里,和普通表、存储过程一样,除非手动执行DROP VIEW删掉它,不然哪怕重启电脑、重启数据库服务,它都不会消失。
你看到的“多数说法会被移除”,应该是把普通视图和临时对象(临时视图、临时表)搞混了——部分数据库支持临时对象,但普通视图完全不属于这类。
View与临时表的具体行为差异
1. 持久化能力
- 视图(View):永久存在于数据库中,只有手动删除才会消失。它本身不存数据,每次调用时都是根据定义去查询底层表的实时数据。
- 临时表:分两种类型(不同数据库规则略有不同):
- 会话级临时表:只在当前数据库连接会话里有效,断开连接(或者重启电脑/服务)就自动销毁。
- 全局临时表:会在所有用到它的会话都断开后才被销毁,生命周期比会话级长,但依然是临时的。
2. 数据存储逻辑
- 视图(View):仅存储查询语句的定义,不占用额外的存储空间来保存数据,每次访问都是动态计算结果。
- 临时表:会把实际数据存在数据库的临时存储区(比如SQL Server的tempdb),是实实在在占用物理空间的。
3. 适用场景
- 视图(View):适合简化复杂查询、封装固定的业务查询逻辑,或者用来限制用户对底层表的访问范围(比如只让用户看到表的部分列)。
- 临时表:多用于存储复杂查询的中间结果,或者在单次会话里临时存放需要多次调用的数据,适合一次性的计算需求。
4. 创建语法示例
- 创建普通视图:
CREATE VIEW user_info_view AS SELECT id, name FROM users WHERE status = 1 - 创建会话临时表(SQL Server为例):
CREATE TABLE #temp_order (order_id INT, total DECIMAL(10,2)) - 创建临时表(PostgreSQL为例):
CREATE TEMP TABLE temp_product (product_id INT, price DECIMAL(8,2))
内容的提问来源于stack exchange,提问作者Moustafa Youssef
相关产品推荐
相关产品推荐

