温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

数据表和特殊的表

发布时间:2020-10-22 23:28:25 来源:网络 阅读:600 作者:长路慢 栏目:关系型数据库

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

我们来创建第一个表为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问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI