临时表与正式表的区别

Oracle中的临时表Temporary Table Oracle中的临时表(Temporary Table,性能优化的利器 阅读详情

来源:https://www.cnblogs.com/mo22han/p/4999612.html

我们在创建数据表的时候,若没有特殊的指明,那么我们创建的表是一个永久的关系型表格,也就是说,这个表格中对应的数据,除非是我们显示的删除的话,表中的数据是永远都存在的。相对应的,在Oracle数据库中还有一种类型的表,叫做临时表。这个临时表跟永久表最大的区别就是表中的数据不会永远的存在。当一个会话结束或者事务结束的时候,这个临时表中的数据,不用用户自己删除,数据库自己会自动清除。 
  1、 事务临时表的管理。

  (1) 事务临时表的创建。

  Oracle数据库根据临时表的性质不同,可以分为事务临时表与会话临时表。事务临时表是指数据只有在当前事务内有效。一般情况下,如果在创建数据表的时候,没有特殊指明这表是会话临时表的话,则该表默认为事务临时表。

  我们可以以下面的语句创建事务临时表。


  Create global temporary table Temp_user 
  (ID NUMBER(12) Primary key,name varchar2(10)); 


  笔者建议:

  这个创建临时表的语句中,虽然没有显性的指明该表是事务临时表,但是,默认的情况下,若没有指明是什么临时表的话,系统默认是事务临时表。我们要创建事务临时表时,可以不指定关键字。但是,这查看起来比较麻烦。我建议,无论在建立什么临时表,都要利用具体的关键字来显形的指明,这大家看起来都方便。一般可以利用ON COMMIT DELETE ROWS关键字来说明该表就是事务性的临时表,而不是会话性质的临时表。

  (2) 事务临时表数据的变化分析。

  事务临时表的话,当事务结束的时候,就会清空这个事务临时表。所以,当我们在数据库临时表中插入数据后,只要事务没有提交的话,该表中的数据就会存在。但是,当事务提交以后,该表中的数据就会被删除。而且,这个变化不会在重做日志中显示。

  具体事务临时表与会话临时表有什么区别,我们在介绍完会话临时表后会详细介绍。

  2、 会话临时表的管理。

  会话临时表,顾名思义,是指数据只在当前会话内有效的临时表。关闭当前会话或者进行新的连接之后,数据表中的内容就会被清除。那会话临时表跟事务临时表到底有什么区别呢?我们以一个实例来看其中的区别。

  (1) 首先,创建一个会话临时表。


  CREATE GLOBAL TEMPOPARY TABLE TEMP_USER 
  (ID NUMBER(12) Primary key,name varchar2(10)) 
  ON COMMIT PRESERVE ROWS; 


  也就是说,会话临时表跟事务临时表的创建语法大致相同,只有最后的关键字有区别。不过两个表虽然类似,但是其内部的处理机制还是有比较大的区别。

(2) 往该表中插入数据。 


 Insert into TEMP_USER values(1001,’victor’); 


  往数据库临时表中插入数据的方法,跟往普通表中插入数据的方法是一样的,都利用insert into语句进行操作。该临时表的数据在会话结束之前都是存在这个表格中的。

  (3) 提交该事务并查询相关记录。

  我们利用COMMIT的语句把该事务提交以后,再用SELECT查询语句进行查询。我们知道,若该表是事务临时表的话,则当该事务结束以后,该表中的内容就会被删除。但是,这是会话临时表,所以即使该事务提交了,但是,利用SELECT语句进行查询时,仍然可以查到该条员工记录。

  (4) 结束当前会话,并重新连接数据库。

  关闭当前会话,从新连接到数据库后,再利用SELECT语句查询时,会有什么结果呢?此时,就查不到我们刚才插入的数据。这也就是说,在关闭对话的时候,数据库系统已经把原有的数据删除了。从以上的分析我们可以看中,会话临时表与事务临时表主要的差异就在于删除数据时机的不同。事务性临时表是在事务提交的时候清除数据,而会话性临时表则是在关闭当前会话的时候清除临时表。只要当前会话没有关闭,即使事务完成了,会话临时表中的数据仍然存在,不会被清除。

  3、 临时表管理需要注意的地方。

  临时表相对与其他表来说,是一种比较特殊的表结构,但是,作用又比较大,Oracle数据库若没有这种表的话,还真是不行。为了管理好这种特殊的表,我们需要注意几个细节。

  一是要注意临时表不能永久的保存数据。只所以称为临时表,就是因为该表中的内容只是临时存在的。当一个会话或者事务结束时,该表中的内容就会被自动清空。所以,在临时表中,一般不要保存永久数据。在实务中,有个不好的操作习惯,就是有些人在测试数据库的时候,喜欢把测试的数据放在临时数据表中。其实,这是对Oralce临时数据表认识的错误。若我们在数据库中,把要测试的数据,如销售定单的内容放在数据库的临时表中的话,则在其他功能中,如要测试销售定单日报表的功能时,就会找不到相关的定单内容。因为离开特定的会话或者事务的话,临时表中的内容就会不存在了。所以,Oralce数据库中所讲的临时表不是给我们来存储测试数据的。

  二是临时表中的数据不会备份、恢复,对其的修改也不会有任何的日志信息。若我们在操作数据库的时候,往数据库的临时表中存入了一些信息。此时突然服务器出现当机。此时,我们想通过数据库备份文件恢复数据库临时表中的内容,或者查看临时表的日志信息,都是无法实现的。也就是说,当服务器以外死机重新启动后,临时表中的内容就会被清空。在数据库的任何地方,如数据库备份文件或者日志信息中,都查不到在重新启动之前数据库临时表中保存了哪些内容,就好象根本没有对临时表进行操作一样。

  三是临时表表空间的管理。临时表在Oracle数据库中,也是表的一种,其也有对应的表空间。在创建临时表的时候,若我们不指定表空间的话,默认的表空间是SYSTEM。对于临时表的表空间管理的话,我们需要注意一个小的细节。若我们把临时表的表空间归属为SYSTEM的话,也就是说,在创建临时表的时候不具体指定具体的表空间,则这个默认的表空间是不能被删除的。而若我们在创建临时表表空间的时候,指定为SYSTEM以外的表空间的话,则在不需要这表空间的时候,我们可以删除。所以,为了后续管理的方便,笔者还是建议大家在创建临时表的时候,要指定表空间。

  四是要注意一个问题,临时表只是数据是临时的,而表仍然是永久的。也就是说,当一个会话结束或者一个事务完成时,其临时表中的数据虽然删除了,但是,临时表本身仍然是存在的。也就是说。Oracle数据库中的临时表表是全局的,只是数据是临时的。这跟SQL Server数据库系统具有比较大的区别。其实,这两个数据库在临时表的处理上有很大的不同,各有各的特色。在以后的文章中,我会专门叙述这两种数据库在临时表管理机制上的不同,欢迎大家关注。

  五是要注意Oracle数据库在给临时表填入数据的时候,不会对相应的记录加锁。也就是说,当在临时表上执行DML语句的操作时,不会给记录加锁,也不会将数据的变化内容写到重做(REDO)日志中。所以不能用临时表保存永久的数据,也不能对临时表进行共同的操作。这是新手在管理数据库临时表经常会碰到的问题。

  六是临时表与普通表之间不能相互转换。在一般情况下,临时表建立后,该表就不能被转换成永久表。所以,这也说明一个道理,利用临时表作为数据库设计时候的测试表不合适。这个临时表可能跟我们按字面意思理解的临时表有误,不是我们所认为的为了测试表结构而建立的临时表。这一点是我们在刚开始接触ORACLE数据库时,经常会犯的错误。

什么是临时表?临时表与普通表区别? 临时表概述与比较 临时表是数据库系统中特殊的表类型,其生命周期限于当前会话或事务,结束后自动删除。主要特点包括会话级作用域、自动清理机制和命名空间隔离。与普通表相比,临时表创建方式不同(CREATE TEMPORARY TABLE)、不持久化且无需显式删除,但在索引和约束支持上较弱。 性能方面,临时表减少日志生成和锁竞争,适合OLTP场景;普通表则支持完整索引和共享访问。各数据库实现存在差异:MySQL默认用MEMORY引擎,Oracle分事务级和会话级,SQL Server存储在tempdb。 典型应用包 阅读详情

相关推荐

【SQLite学习笔记】创建表

SQLite的CREATE TABLE命令学习,更新尚未结束

AuspiciousChan的博客 1万+

管理临时数据表

在Oracle数据库中还有一种类型的表,叫做临时表。这个临时表跟永久表最大的区别就是表中的数据不会永远的存在。当一个会话结束或者事务结束的时候,这个临时表中的数据,不用用户自己删除,数据库自己会自动清除。 我们在创建数据表的时候,若没有特殊的指明,那么我们创建的表是一个永久的关系型表格,也就是说,这个表格中对应的数据,除非是我们显示的删除的话,...

weixin_34387284的博客 288

SQL基础培训20-临时表和表变量概念和误区

本文的前一小节“3.4、表变量仅驻留在内存中”,我们已经使用实际例子证明了,当SQL Server内存大小不足以存放表变量数据大小的时候,SQL Server会将表变量的数据,存放在Tempdb的数据文件磁盘上,以此来避免因为内存不足而导致服务死掉。就是说,表变量数据操作的时候,是不可能存在一些数据成功,一些数据失败的。全局临时表:以##打头的临时表称为全局,此类型的临时表对所有进程可见,当前进程和其他进程均可访问,生命周期是所有使用到全局临时表的连接完全关闭后,临时表消亡。

悠闲饭团的博客 177

临时表,视图,内存表

临时表和视图的区别 视图 视图是虚表,操作视图会更新实体表的数据。 视图跟其它实体表共享一个命名空间,因此不能与实体表重名 视图不会随着会话结束而消失 临时表跟实体表是两个互不相干的两个表,因此不存在操作临时表会影响到实体表的情况。 会话结束临时表自动释放 临时表不是内存表,show tables无法查看临时表 视图应用场景: 应用场景1:保密工作,比如有一个员工工资表,如果你只希望财务...

qq_20610631的博客 1940

数字经济新质生产力数字化转型数据要素流通交易解决方案:数据要素化演进路径与管理、公共数据授权运营平台体系、数据底座、典型应用场景

数字经济的发展依赖于数据要素的有效流通与交易,数字化转型的核心在于数据的全生命周期管理和价值释放。数据要素化通过数据资源化、资产化和资本化的“三化”过程,实现其经济与社会价值。数据管理涵盖采集、存储、加工、分析等环节,支持数据的度量与交换。公共数据、企业数据和个人数据通过场内、场外及二级市场交易实现资本化。公共数据开发利用面临隐私泄露、监督管理难等痛点,目标是构建授权运营平台体系,确保数据流通的安全与效率。平台体系包括统一门户、授权管理、运营管理、合规监督等核心功能,支持明文、密文和可信交换流通方式。数据底

weixin_44094929的博客 1001

ENVI遥感数字图像处理方法(一)

文章目录1.查看图像的空间分布特征(一)生成灰度图像(二)生成假彩色图像(三)连接不同视图的影像2.查看图像的像元灰度值3.统计并查看图像直方图 1.查看图像的空间分布特征 在打开一幅遥感影像时,有两个文件,我们要选择数据文件来打开。 打开过后,点击Data Manager,查看该影像的波段 该影像共有6个波段 (一)生成灰度图像 步骤如下: (二)生成假彩色图像 先生成一个一般的假彩色图像: 再生成一个标准假彩色图像,将其存放在一个新的视图中: 标准假彩色图像波段构成为:近红外、红光波段、绿

江昊东的博客 5万+

Oracle临时表详解

临时表是一种特殊的表。当我们需要对某一(也可以是多个)表中的一批数据进行反复的操作时,通过对这批数据创建一个临时表,可能会简化操作并且有可能提高效率!

专注Java后端技术干货、项目源码总结分享,期待您的关注。 1万+

线性自抗扰控制LADRC(一)---基础知识

LADRC(Linear Active Disturbance Rejection Control)是ADRC的线性化版本,通过简化非线性模块(如ESO和反馈律)降低计算复杂度,适用于实时控制系统(如电机驱动)。

ApexYuan 2075

关于mysql临时表、truncate、delete

mysql 把select结果保存为临时表,有2种方法 第一种,建立正式的表,此表可供你反复查询 drop table if exists a_temp; create table a_temp as select 表字段名称 from 表名称 truncate与delete的区别 truncate table命令将快速删除数据表中的...

weixin_34162629的博客 211

Mac微信聊天记录备份终极指南:用软链接轻松迁移到外接硬盘(附重签名教程)

本文详细介绍了如何通过软链接技术将Mac微信聊天记录备份迁移到外接硬盘,解决内置存储空间不足的问题。教程包括备份文件定位、软链接创建及微信重签名步骤,帮助用户高效管理微信数据,释放Mac存储空间。

uuu88的博客 1163

u3d逆向学习之纯C内存读写与ImGui绘制(Android)

方法:需要在/proc/pid/maps文件查找模块名,一行行遍历所有内存,第一个参数为模块名,第二个参数为索引index(因为该模块会有多个,index为正序遍历第index个该模块),若找到了则使用。32位游戏的指针大小采用4字节,而64位游戏的指针大小采用8字节(这里需要注意),数据地址以16进制存储,使用unsigned long类型 ,该函数只有一个参数,数据地址,返回该地址的指针跳转地址。文件,比较其中的内容是否与传入的包名相同,如果相同,则返回该进程的PID。

zhoujunjie2004的博客 1686

从文本文件导入数据到hive表中

从文本文件导入数据到hive表中 1.数据保存为CSV格式,不能带标题行,以逗号分隔,用tr命令将逗号替换成hive默认的\001分隔 tr ',' '\001' /home/zengsiwei362/zhoulixin54520150730.txt 2.建一张与目标表一样的临时表,可以是分区表也可以不是分区表,导入的语句不同而已,但是文件格式一定是textfile 3.导入数据到tmp

zhoulixin8的专栏 2810

手把手教你用ECharts打造炫酷3D饼图(附完整源码)

本文详细介绍了如何使用ECharts创建炫酷的3D饼图,从环境配置到完整源码实现,涵盖参数解析、视觉优化和交互增强技巧。通过实战案例,帮助开发者快速掌握3D数据可视化技术,提升数据展示效果。

weixin_29031057的博客 279

with as 与临时表的区别_《MySQL 入门教程》第 20 篇 通用表表达式

文章来源:https://blog.youkuaiyun.com/horses/article/details/108053464原文作者:不剪发的Tony老师来源凭条:优快云上一篇介绍了子查询的各种概念和作用,本篇我们讨论一个和派生表类似但更加强大的功能:通用表表达式。通用表表达式(Common Table Expression)是一个在语句级别定义的临时结果集,定义之后可以在该语句中多次进行引用。MyS...

weixin_39816024的博客 763

深度学习图神经网络 (GNN) —— 处理图结构数据(六十九)

本文系统介绍了图神经网络(GNN)的核心概念、主流模型及其应用。主要内容包括: GNN基础:阐述了图结构数据的特性(节点数不定、连接不规则),以及GNN相比CNN/RNN的优势在于处理非欧式空间的图数据。 核心机制:重点讲解了消息传递框架(MPNN),通过聚合邻居信息迭代更新节点表示,并分析了GCN的归一化邻接矩阵计算和GAT的注意力权重机制。 典型模型: GCN:基于归一化邻接矩阵的特征传播 GAT:引入注意力机制区分邻居重要性 GraphSAGE:通过采样解决大图扩展性问题 GIN:理论表达能力最强的图

hello.reader 299

中文核心:swin transformer 农作物病虫害识别 完整代码数据

中文核心:swin transformer 农作物病虫害识别

939

MySQL 为什么临时表可以重名 ?

我们在优化join查询的时候使用到了临时表。你可能会有疑问,为什么要用临时表呢?直接用普通表是不是也可以呢?今天我们就从这个问题说起:临时表有哪些特征,为什么它适合这个场景?这里,我需要先帮你厘清一个容易误解的问题:有的人可能会认为,临时表就是内存表。但是,这两个概念可是完全不同的。•内存表,指的是使用Memory引擎的表,建表语法是create table … engine=memory。这种表的数据都保存在内存里,系统重启的时候会被清空,但是表结构还在。

qq_66627105的博客 1086

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

8.2.4临时表和正式表

区别: 1.不同的客户端可以创建名字相同的临时表而没有冲突  2.一个临时表被创建仅仅在连接期间,当客户端断开连接时自动删掉临时表。 3.一个临时表可以和一个非临时表有同样的名字。 4.一个临时表可以被重新命名只能使用alter而不能使用rename table。 临时表和内存表的区别是,内存表在服务器重启是丢失。 8.3 修改表 在创建表后,修改表增加一列 alter table

CodeMyDream的专栏 514

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

MySQL临时表深度解析:显式与内部临时表的区别、原理与排查指南

在数据库性能优化中,SQL执行计划里的临时表往往是隐蔽的性能瓶颈。MySQL中的临时表分为用户显式创建的临时表与优化器自动生成的内部临时表,二者生命周期不同,却都可能触发内存转磁盘的降级。理解内部临时表的触发机制(如GROUP BY、UNION、DISTINCT等),并学会通过EXPLAIN中的Using temporary与状态变量Created_tmp_disk_tables定位问题,是后端与DBA的必备技能。从索引设计、参数调优到连接池清理策略,本内容结合实际故障案例,梳理临时表的建表姿势、引擎选型与

weixin_31960565的博客 138

关于mysql临时表 、truncate与delete

mysql 把select结果保存为临时表,有2种方法 第一种,建立正式的表,此表可供你反复查询 drop table if exists a_temp; create table a_temp as  select 表字段名称 from 表名称 truncate与delete的区别   truncate table命令将快速删除数据表中的所有记录,但保留数

余安 2212

【Sql Server】数据库变量表和临时表的区别,并运用变量表遍历和随机生成姓名记录

掌握了临时表变量和临时表,对于初始化表数据是非常有用的。变量表占内存适合数据量小情况,临时表不占内存,适合数据量大情况

小5聊的博客 2938

SQL Server 表变量和临时表系列之概念篇

问题引入 “菜鸟啊,最近我看到阿里云开发者论坛的数据库RDS中有人在提SQL Server表变量和临时表如何选择的问题,你去深入探讨下这个问题吧,解答解答他们的疑惑吧”,老鸟又开始为菜鸟找活干了。 “鸟哥啊,关于表变量和临时表使用选择的问题啊,向来行业里争论不休,我比较担心我们的观点被人家拍砖啊”。 “鸟啊,有争论才说明这个问题有价值啊,所以我们才更应该去弄清楚,道明白啊”。反正老鸟总会

资料汇总整理-仅供个人学习使用 3078

mysql中临时表的特点_解析Mysql临时表及特点_MySQL

bitsCN.com临时表是当连接没有断开时存在,一旦断开就不会存在,临时表的数据和结构都在内存中,可以做个测验,你创建一个临时表,但是到响应的数据目录下并不会找到.frm文件mysql> CREATE TEMPORARY TABLE tmp_table (->-> name VARCHAR(10) NOT NULL,-> value INTEGER NOT NULL-&g...

weixin_29170327的博客 299

MySQL45讲读书笔记 36讲为什么临时表可以重名

一 序 本文属于极客时间MySQL45讲读书笔记系列。本文老师主要讲临时表。 今天我们就从这个问题说起:临时表有哪些特征,为什么它适合这个场景? 这里,我需要先帮你厘清一个容易误解的问题:有的人可能会认为,临时表就是内存表。但是,这两个概念可是完全不同的。 内存表,指的是使用Memory引擎的表,建表语法是create table … engine=memory。这种表的数据都保...

bohu83的博客 376

Asp.Net 储存过程表变量传递--(用临时表一次性插入所有数据)

前言: 在做的项目中,有一个要求就是需要用存储过程进行对数据进行一次性的插入操作。之前由于没接触过,也是弄的很头大。在网上看了还多资料,写的不详细,实用性不好,最后自己根据网上的总结出自己的一个大家都可以用的。 在正式开始之前先介绍下为啥用存储过程对数据进行操作。 ①:效率高,只连接一次数据库,就可以完成所有的数据操作,不必进行循环一次次的连接数据库。 ②:减少后代的代码量,直接调用存储过...

GreyCastle的博客 919
上一篇: SQL中ON和WHERE的区别
下一篇: 详解MySQL数据库优化的八种方式(经典必看)
周末去看海
博客等级 码龄9年 50粉丝 5原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值