2、 数据释放时的异同。
SQL SERVER数据库系统有两种临时表,一种是本地临时表,一种是全局临时表。本地临时表只在当前会话中可以查找到。也就是说,某个用户创建了一个临时表,只有本人可以查询得到,而其他用户是查询不到这张临时表的。第二种是全局临时表,这张表无论是谁创建的,只要该表的会话没有结束,即该临时表只要存在与数据库中,则任何登陆该数据库的用户都可以查询到该临时表的内容。无论是采取哪种表,只要创建该临时表的用户结束该对话时,则该表就会被自动删除。如要实现上面所讲的用户帐户重复登陆的问题,需要用到全局临时表。当一个系统用户登陆时,就新建一张以该用户名命名的临时表;当另外一个用户也试图想以这个用户名登陆时,系统就会查到以该用户名为名字的临时表已经存在,如此,就会拒绝该用户名的再次登陆。而当该用户退出时,或者意外中断该会话时,则该临时表就会被系统删除。该帐户名下次登陆时,就可以正常使用。
ORACLE数据库系统的临时表也有两种,一种是事务型临时表,一种是会话型临时表。事物型临时表是当一个事物结束时清空临时表的内容;而会话型临时表就当一个会话中断或者被重新连接时数据表的内容就会清空了。从中,我们可以看到在数据清空方面,两个数据库处理方式的两个重大区别。一是ORACLE 数据库在清除临时表是,只清楚数据,而不清楚临时表的本身。二是从功能上来讲,ORACLE还提供了一种更加细分的事务型临时表。一个会话中,可能有多个事务。也就是说,ORACLE 清空临时型数据表的时间更加细腻,可以根据同一个会话中的不同事务来清空临时表。
另外还要说明的一点就是,ORACLE的会话型临时中的内容对于各个用户来说,内容都是独立的。具体的说,就是各个用户在会话的过程中,都可以往一张临时表中存储数据;但是用户查询临时表中的数据的时候,只能够查询到自己所创建的内容,而不能看到其他用户所增加的记录。这对于临时表的安全性来说,是非常有保障的。
笔者评论:
ORACLE的临时表跟SQL SERVER数据库的临时表比起来,有优点也有缺点。如ORACLE数据库的临时表支持事务型的临时表,可以把一个会话分割成几个独立的事务,以事务的级别来管理临时表,这对于我们来说,处理起来比较方便。
而缺点就是,ORACLE数据库的临时表,出于数据库本身性能的考虑,在某些方面,作了一些限制。如在默认情况下,ORACLE数据库的临时表不能采用外键;也不支持LOB对象。确实,若临时表中存在外键或者LOB对象的话,会对临时表的性能产生很大的影响。但是,在实际工作中,有时候确实需要在临时表上采用外键或者LOB对象。此时,我们只能够采用一些变通的方式加以解决。
3、 表存储时的异同。
上面我已经简要介绍过两个数据库对于表处理时的异同。下面再对此相关的内容进行一下总结。
SQL SERVER在结束一个会话后,就会把用户所创建的临时表删除。而ORACLE在结束一个会话或者一个事务时,删除的只是表的内容,表的结构仍然会存在。ORACLE就是凭借牺牲一点表结构的存储空间,来达到提高ORACLE 数据库临时表处理性能的目的。
笔者评论:
个人比较钟情于ORACLE数据库的临时表处理方法,因为在数据库优化中,相对于硬盘空间来说,数据库运行的性能,要比其重要得多。想扩大硬盘的空间不需要多少成本,但是,想提高数据库的运行性能的话,相对来说,要困难得多。
以上是我对两个数据库临时表处理方式的分析,这些个人的观点仅供大家在数据库选型中参考。或许评论中有些主观偏见,还望谅解。