sql中临时表和视图的区别--从应用场景角度理解

本文详细介绍了SQL中的视图和临时表的概念,并通过实际应用场景解析了它们的区别。视图用于提供数据的安全访问和简化复杂的查询语句,而临时表则适用于存储短期使用的中间数据。

初学sql时,视图和临时表的概念不容易区分,以下给出了视图和临时表一些应用场景,希望能从中理解两者之间的区别

1. 视图概念:

简单说,视图是按照你的sql语句生成的一个虚拟的东西,本身并不占数据库的空间

譬如有过这个表

create table table_1(id int,name varchar(100))

然后有这么一个视图

create view view_1 as select id from table_1

当你表里的数据增加或者删除的时候,你视图里的内容也随之变化

总之你不能对视图进行update或者insert into操作

说白了,就是视图的变化随着表的变化而变化

除非重新create or replace view_1才能把这个视图中的东西改掉

 2.临时表的概念:

临时表的很简单,MySQL 临时表在我们需要保存一些临时数据时是非常有用的。临时表只在当前连接可见,当关闭连接时,Mysql会自动删除表并释放所有空间。意思就是临时表就储存在内存中,临时创建的表,你把sql语句跑完,关掉,它就没了。所以,我们经常只是在存储过程或者频繁操作语句的时候能用到临时表。(下面给出了临时表的应用场景)

什么时候使用视图呢?

应用场景1:保密工作,比如有一个员工工资表,如果你只希望财务看到员工工资这个字段,而其他人不能看到工资字段,那就用一个视图,把工资这个敏感字段过滤掉

应用场景2:有一个查询语句非常复杂,大概有100行这么多,有时还想把这个巨大无比的select语句和其他表关联起来得到结果,写太多很麻烦,可以用一个视图来代替这100行的select语句,充当一个变量角色

什么时候用临时表呢?

应用场景1:你在短期内有很多DML操作,比如京东淘宝亚马逊的购物车表,把东西放购物车(insert),变更数量(update),删除商品(delete),一旦结算金钱后,这些数据就要清掉,这时需要用临时表

应用场景2:在导出数据时,你可能不想导完整的数据库,或者表,你可能只想要导出符合某些条件的数据,那么你可以创建临时表,把select语句插入到临时表,接着导出这个临时表,导完以后通过结束session或者事务的方式,让这些没用的数据自动清理掉

应用场景3:你在写存储过程时,有很多的连接,比如你需要连接A,B,C,D,E,F,G,H那么多张表,才能得到你的结果表,同时做连接的消耗太大,你可以先A,B,C连接的结果,放在临时表,接着再把这张临时表,跟D,E,F连接,作为新的结果放在临时表,接着再把临时表与G,H连接,最后得到临时表数据,一次插入到结果表(永久表)。

总结:

先说下区别吧(因为差别还是很大,就捡重点说吧)

视图就是为了安全起见,不让用户看到表的结构,其实就是虚的表根本不存在,呈现方式其实就是一段sql代码

临时表呢,基本是在sql操作过程中遇到,辅助我们sql语句的实现。有一个场景你需要记住,让你理解临时表的概念:

当你sql查询运行出结果后,后续的操作需要用到你上面查询的结果(也就是说对你查询的结果再操作),这种情况下,我们需要建立临时表,将结果保存在临时表中!!!!

这些都是自己学数据库中遇到弯路,纯属个人见解!有什么不对的地方,希望能指出,感谢

### SQL临时表应用场景使用方法 #### 临时表的基本概念 临时表是一种在数据库会话期间创建的特殊表,其生命周期仅限于当前会话或事务。一旦会话结束或显式删除,临时表及其数据将被自动销毁[^1]。根据数据库管理系统(DBMS)的不同,临时表可以分为本地临时表全局临时表。本地临时表仅对创建它的会话可见,而全局临时表则对所有会话可见,但数据仅在创建它的会话中有效。 #### 创建临时表的语法 以下是创建临时表的基本语法: ```sql CREATE TEMPORARY TABLE temp_table_name ( column1 datatype, column2 datatype, ... ); ``` 例如,在 MySQL 中创建一个名为 `temp_employees` 的临时表: ```sql CREATE TEMPORARY TABLE temp_employees ( employee_id INT, first_name VARCHAR(50), last_name VARCHAR(50), department_id INT, salary DECIMAL(10, 2) ); ``` #### 插入数据到临时表 可以通过 `INSERT INTO ... SELECT` 语句将现有表中的数据插入到临时表中。例如,从 `employees` 表中选择部门 ID 为 10 的所有员工,并将其插入到临时表 `temp_employees` 中: ```sql INSERT INTO temp_employees (employee_id, first_name, last_name, department_id, salary) SELECT employee_id, first_name, last_name, department_id, salary FROM employees WHERE department_id = 10; ``` #### 查询分析临时表数据 临时表可以像普通表一样进行查询分析。例如,计算临时表中所有员工的平均工资: ```sql SELECT AVG(salary) AS average_salary FROM temp_employees; ``` #### 临时表应用场景 1. **批量更新操作** 在需要对大量数据进行更新时,可以先将需要更新的数据存储在临时表中,然后通过 JOIN 操作将临时表与主表关联,从而实现高效的数据更新[^3]。 示例:假设有一个用户表缺少部分用户的生日信息,可以通过创建一个包含完整生日信息的临时表,并使用 JOIN 操作来更新主表中的数据。 2. **中间结果存储** 在复杂的查询中,尤其是涉及多个子查询或聚合操作时,可以将中间结果存储在临时表中,以提高查询性能并简化逻辑[^5]。 示例:在 Hive SQL 中,使用临时表存储汇总后的数据,然后进一步筛选出符合条件的结果[^5]。 3. **多用户环境下的隔离性** 在 SQL Server 中,如果本地临时表由存储过程创建或由多个用户同时执行的应用程序创建,则 SQL Server 会在内部为每个本地临时表的表名追加一个数字后缀,以区分不同用户创建的表[^1]。 4. **数据分析报表生成** 临时表常用于生成报表或进行数据分析。例如,可以将某个时间段内的销售数据存储在临时表中,然后对其进行进一步的统计分析。 #### 注意事项 - 临时表只在当前会话中有效,会话结束后自动销毁[^3]。 -SQL Server 中,为本地临时表指定的表名不能超过 116 个字符[^1]。 - 可以通过数据库管理系统提供的视图或工具监控临时表空间的使用情况[^2]。 #### 示例代码 以下是一个完整的示例,展示如何在 SQL Server 中创建使用临时表: ```sql -- 创建临时表 CREATE TABLE #TempEmployees ( EmployeeID INT, FirstName NVARCHAR(50), LastName NVARCHAR(50), DepartmentID INT, Salary DECIMAL(10, 2) ); -- 插入数据 INSERT INTO #TempEmployees (EmployeeID, FirstName, LastName, DepartmentID, Salary) SELECT EmployeeID, FirstName, LastName, DepartmentID, Salary FROM Employees WHERE DepartmentID = 10; -- 查询数据 SELECT AVG(Salary) AS AverageSalary FROM #TempEmployees; -- 删除临时表(可选) DROP TABLE #TempEmployees; ``` ---
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值