数据表和特殊的表

57次阅读
没有评论

共计 2546 个字符,预计需要花费 7 分钟才能阅读完成。

自动写代码机器人,免费开通

表空间的下一层次应该就是我们的数据表,也是我们最常用的对象,存储字段的关联字段的对象

我们来创建第一个表为 test

  格式

 create table test(id number(10) not null primary key,name varchar(20) not null,age char(2) not null);

  解释

 create table 用于创建表的关键词,后面是表名 test,括号里面是列信息(id 号,name 名字)紧接着类型,然后 not null 不能为空,为就是必须插入,primary key 主键,全局唯一的标识符。

  格式

 select table_name,tablespace_name from user_tables from table_name= test

  解释

   user_tables 表用于查看所有用户表信息

  格式

 describe test;

  解释

  查看表结构,只描述当前对象的表结构,关键字可以缩写 desc.

  格式

 alter table test rename to test1;

  解释

  修改数据表的名字 关键字 rename to 

  格式

 alter table test modify (id number(20));

  解释

  修改数据表其中某一列的类型的长度

  格式

 alter table test rename column id to user_id;

  解释

  修改数据表列名

  格式

 alter table test add(sal int);

  解释

  数据表中增加一列数据(类型)

  格式

 alter table test drop column sal;

  解释

  删除数据库中某一列

  格式

 drop table test cascade constraints;

  解释

  删除整个表,cascade constrints 表示当表与其他的表有关联或者约束,使用关键字强制删除这个表

  那么在 Oracle 中还有一类表叫做临时表,听名字大体就知道这个表应该是临时存在的,其实不然

  什么是临时表,那么简单来说我们用 create table 创建的表叫做永久表或者普通标,临时表其实和普通标没什么区别,临时表的临时是指数据的临时性,也就是说表也是会一直存在的,但是数据会在 Oracle 中一些条件下被自动清空!

  清空临时表条件有两种:1、事物提交或者回滚 2、会话的结束

  那么 Oracle 中每次对数据库操作不是立刻就更新操作,而是以事物为单位修改提交到数据库,每个事物会议 commit 结束,从上一条到本次的 commit,其中可能是一条或者多条 SQL 语句,那么也就意味事物的提交 commit,事务回滚 rollback 废掉当前的事物操作,也就是刚刚做的 SQL 语句不算数

 Oracle 中的会话是每个与用户交互的进程,临时表清空数据也分两类:1、事务级临时表 2、会话级临时表

  事务级临时表就是当数据每次事务的提交都会清空数据,会话级别是当断开本次会话清空数据,意味着 Oracle 会话用户线程的结束。

  会话级临时表

  格式

 create global temporary table  tmp_user_session(user_id) on commit preserve rows;

  解释

  创建一个会话临时表 create global temporary

  格式

  commit

  解释

  提交数据,事物结束,为什么我们平常不需要这样去做因为我们默认吧自动提交事务功能打开了

  事务级别

  格式

 create global tempporary table …… on commit delete rows;

  解释

  来创建事务级别的临时表,当我们提交或者回滚数据将会自动清除

  格式

 select table_name,tablespace_name from user_tables where table_name= T_USERS_SESSION or …….;

  解释

  查看表空间信息与之前普通标比较发现,临时表表空间为空

  那么我们说了那么多,到底是干啥用呢,下面说一说他的应用尝尽

 1、大小表分割

  表创建索引可以很大程度上提高查询数据的效率,但是在亿级以上大量的数据,创建索引耗费时间相当大,而且查询大量的索引表与直接查询的效果相差不大,没什么性能上提升,这时候后常用的方法就是把分割大表,分割成多个小的临时表,对这临时表些操作,最后对查询结果进行综合处理

 2、并行问题

    并行基于多线程的为题,简答来说几个客户端同一时间对对象进行操作,会导致混乱,最常用的给文件或者表加上锁,防止多个用户一起修改对象造成混乱的结果。那么在频繁对表操作时候,锁表一定会对整个数据库性能有影响,这时候利用临时表,临时表会话中数据时透明的,不用对表锁定,大大提高数据库性能

 3、缓存

  程序段可能需要做很多的复杂运算,这时候创建临时表将数据存储临时表,可以向普通表一样操作。这时候临时表作为临时数据的存储空间。

 Oracle 中还一种特殊的表叫做 dual,也是很有意义的表,简单来说是 Oracle 中的虚表,也叫伪表。那么他是干什么用的,我们知道 select * from 必须指定一个表才能输出结果,那么有一些应用场景没有表存储比如系统调用,需要指定表来输出,这时候 dual 的作用就显示出来,也就是说 dual 不是作为数据存储,而是作为 from 的源表。

  格式

 select sysdate from dual; or selec 3+2*5 as result from dual;

  解释

  时间是实时变化的,系统调用时间,这时候输出需要指向一个源表 dual 作用可显而知, 而且可以作为运算的输出表。

  修改 dual 数据是否会产生影响,那么我们发现查询后 dual 只有一列,而且只有一个值 Y,我们随便插入数据然后进行以上的运算发现结果都是相同,我们删除里面的表结构数值运算也是一样的,那么值的一提的是,Oracle 10g 以前对 dual 做插入删除都会影响运算的结果,那么在 oracle 10g 之后做了很大改进,不论对 dual 内部数据进行了如何的操作都不会影响作为虚表的查询结果,对 dual 内部做了很多工作,无论真实的数据内容是啥,都保证了效果和单条记录是一样的,Oracle 10g 对该表做了处理机制做了较大的改进。

   

向 AI 问一下细节

丸趣 TV 网 – 提供最优质的资源集合!

正文完
 
丸趣
版权声明:本站原创文章,由 丸趣 2023-12-18发表,共计2546字。
转载说明:除特殊说明外本站除技术相关以外文章皆由网络搜集发布,转载请注明出处。
评论(没有评论)