数据库应用之临时表尝试--同一个方法中建完临时表立即查询却找不到问题

本文探讨了在JavaWeb项目中使用临时表的问题及解决方案。通过实例对比了物理表和临时表的操作,并分析了连接池对临时表的影响,得出在JavaWeb环境下使用临时表可能存在的局限性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

使用场景:

在数据碰撞时需要生成临时表,如下图所示,才开始使用的是物理表,生成完了然后删除,但是后来想尝试一下能不能使用临时表就能避免了每次删除物理表,减少相关的操作,经过实践发现哪怕在同一个方法中也经常刚刚建立了临时表就没法进行查询了,经过排查推断,因为项目中使用的是连接池,哪怕同一个方法中的使用的连接,也可能是不同的连接,连接池中总保持这同一批的一些连接,这也造成了javaweb项目中临时表的使用不适合。


临时表的部分相关基础知识:
临时表:像普通表一样,有结构,但是对数据的管理上不一样,临时表存储事务或会话的中间结果集,临时表中保存的数据只对当前 会话可见,所有会话都看不到其他会话的数据,即使其他会话提交了,也看不到。临时表不存在并发行为,因为他们对于当前会话都是独立的。 (它默认是事务级别的)
在oracle中临时表可分为会话级临时表和事务级别临时表。
临时表的作用:对于庞大的数据我们只要查询其中一小部分结果集这样我们可以借助临时表。
1.会话级别临时表
会话级临时表是指临时表中的数据只在会话生命周期之中存在,当用户退出会话结束的时候, Oracle 自动清除临时表中数据。
create global temporary table aaa(id number) on commit oreserve rows;
insert into aaa values(100);
select * from aaa;
这是当你在打开另一个会话窗口的时候再次查询,表内的数据就查询不到了。
2.事务级别的临时表
create global temporary table bbb(id number) on commit delete rows;
insert into bbb values(200);
select * from bbb;
这时当你执行了commit和rollback操作的话,再次查询表内的数据就查不到了。  
默认下的:
SQL> create global temporary table aaa as select * from dba_objects;
Table created.
SQL> select * from aaa;--没有数据,因为省掉了on commit delete rows

在使用MySQL Workbench进行数据库设计时,建表后可能会遇到一些问题,导致表不是实体。以下是一些可能的原因和解决方法: 1. **表没有主键**: - 每个实体表都应该有一个主键来唯一标识每一行。如果没有定义主键,MySQL Workbench可能不会将其视为一个实体。 - 解决方法:在设计表时,确保每个表都有一个主键。 2. **表之间的关系没有正确设置**: - 如果表之间的关系没有正确设置,MySQL Workbench可能无法识别实体之间的关系。 - 解决方法:使用MySQL Workbench的关系工具,确保每个表之间的关系(如一对多、多对多)都正确设置。 3. **表名或列名不符合命名规范**: - 如果表名或列名不符合MySQL Workbench的命名规范,可能会导致识别问题- 解决方法:确保表名和列名使用小写字母、数字和下划线,避免使用特殊字符。 4. **表没有添加到ER图中**: - 如果表没有正确添加到ER图(实体关系图)中,MySQL Workbench可能不会将其显示为实体。 - 解决方法:在ER图中手动添加表,或者确保在设计时表被正确添加到ER图中。 5. **缓存或软件问题**: - 有时候,软件的缓存或临时文件可能会导致显示问题- 解决方法尝试重新启动MySQL Workbench,或者清除缓存文件。 通过检查以上几个方面,可以帮助解决在MySQL Workbench中建表后不是实体的问题
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值