加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

Oracle 数据库表(常见的表)

发布时间:2020-12-12 13:24:36 所属栏目:百科 来源:网络整理
导读:数据库表(常见的表) ??? 堆组织表 :普通表 ??? 索引组织表: iot ??? 嵌套表 ??? 临时表 ??? 外部表 1 表 ??? 一个表最多 1000列,oracle会把列大于254的行存储在多个单独的行段中, ??? 表中的行是无限的, ???? 术语: ????? 段: ????????? 表:表段保

数据库表(常见的表)

???堆组织表:普通表

???索引组织表:iot

???嵌套表

???临时表

???外部表

1 表

???一个表最多1000列,oracle会把列大于254的行存储在多个单独的行段中,

???表中的行是无限的,
????术语:

?????段:

?????????表:表段保存一个数据库表的数据

?????????表分区:这种段类型用于分区

?????????索引:这种段类型保存索引结构

?????????索引分区:类似于表分区

????????嵌套表:为嵌套表指定段的类型

????????回滚段:undo数据就存在这里

?????段空间管理

??????Hwm高水位线

?2 堆组织表

?????全表扫描时,会按命中的顺序来读取数据,而不是以插入的顺序。

??创建一个表

???create?table?t

???(?x?int?primary?key,?

?????y date,?

?????z clob?

???)

??查看起详细的创建信息

?????select?dbms_metadata.get_ddl(?‘TABLE‘,?‘T‘?)?from?dual;

????CREATE TABLE "SCOTT"."T"

???( "X" NUMBER(*,0),

"Y" DATE,

"Z" CLOB,

?PRIMARY KEY ("X")

??USING INDEX PCTFREE 10 INITRANS 2 MAXTRANS 255

??STORAGE(INITIAL 65536 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645

??PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1 BUFFER_POOL DEFAULT)

??TABLESPACE "USERS" ?ENABLE

???) PCTFREE 10 PCTUSED 40 INITRANS 1 MAXTRANS 255 NOCOMPRESS LOGGING

??STORAGE(INITIAL 65536 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645

??PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1 BUFFER_POOL DEFAULT)

??TABLESPACE "USERS"

?LOB ("Z") STORE AS (

??TABLESPACE "USERS" ENABLE STORAGE IN ROW CHUNK 8192 PCTVERSION 10

??NOCACHE LOGGING

??STORAGE(INITIAL 65536 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645

??PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1 BUFFER_POOL DEFAULT))

?

3 索引组织表iot

??Iot就是存储在一个索引结构中的表,iot的数据则按主键存储和排序,iot中数据就是索引,索引就是数据,

??想保证数据存储在某个位置上,或者希望数据已某种特定的顺序物理存储,就适合用iot

??Create table t(I?number,x number) ORGANIZATION INDEX

4 嵌套表

?????create table dept

????(deptno number(2) primary key,

????dname ????varchar2(14),

????loc ??????varchar2(13))

??????create table emp

???(empno ??????number(4) primary key,

????ename ??????varchar2(10),

????job ????????varchar2(9),

????mgr ????????number(4) references emp,

????hiredate ???date,

????sal ????????number(7,2),

????comm ???????number(7,

????deptno ?????number(2) references dept );?

??create or replace type emp_type –创建一个type

????as object

????(empno ??????number(4),

?????ename ??????varchar2(10),

?????job ????????varchar2(9),

?????mgr ????????number(4),

?????hiredate ???date,

?????sal ????????number(7,

?????comm ???????number(7,2) );

?????create or replace type emp_tab_type

????as table of emp_type

????/

?

????create table dept_and_emp

???(deptno number(2) primary key,

?????dname ????varchar2(14),

?????loc ??????varchar2(13),

?????emps ?????emp_tab_type

????) ?nested table emps store as emps_nt;

???????alter table emps_nt add constraint

???????????emps_empno_unique unique(empno)

?

??????insert into dept_and_emp

???select dept.*,

???????CAST( multiset( select empno,ename,job,mgr,hiredate,sal,comm

?????????????????????????from SCOTT.EMP

?????????????????????????where emp.deptno = dept.deptno ) AS emp_tab_type )

?????from SCOTT.DEPT

???multiset?关键字告诉oracle这个子查询想返回多行,

???cast用于提示oracle把返回的结果集作为一个集合类型,

?5 临时表

???临时表用于保存事务或会话期间的中间结果集,临时表保存的数据只对于当前会话可见,所有会话都看不见其他会话的数据,即使commit,别的会话也看不到它的数据,关于临时表,不存在多用户并发问题,

???临时表会从当前登录用户的临时表空间分配存储空间,

????事务临时表与会话临时表

???create?global?temporary?table?temp_table_session

????on?commit?preserve?rows?

????as?

????select?* from?scott.emp?where?1=0

? ------?基于会话

create?global?temporary?table?temp_table_transaction

????on?commit?delete?rows?

????as?

????select?* from?scott.emp?

---------where?1=0where1=1,都一样,ddl,有commit

?-----?基于事务

??insert?into?temp_table_session select?* from?scott.emp;.? ?

? insert?into?temp_table_transaction select?* from?scott.emp;

??提交则数据消失

?select?session_cnt,?transaction_cnt

?????from?(?select?count(*)?session_cnt from?temp_table_session ),?(?select?count(*)?transaction_cnt from?temp_table_transaction );

select?(select?count(*)?session_cnt from?temp_table_session ),(?select?count(*)?transaction_cnt from?temp_table_transaction )?from?dual

?临时表可以有永久表的很多属性,可以有触发器,检查约束,索引等,

??不能使用完整性约束,不能有nested属性,不能是iot,不能分区,不能通过analyze表命令生成统计信息,

??临时表的缺点之一是优化器不能正常的得到临时表表的真实统计信息(cbo),

?可以在进程中使用临时表

临时表会生成少量的redo,但是确实还会生成redo,没办法避免,为回滚数据生成的,如果只是对临时表执行insert,select,生成的redo几乎注意不到

??10g后动态采样,动态采样在查询解析时完成,

select?table_name,?last_analyzed,?num_rows from?user_tables;

?查看统计的信息,分析的时间

SQL> select table_name,last_analyzed,num_rows from user_tables where table_name=‘EMP‘;

?

TABLE_NAME ????????????????????LAST_ANALYZE ??NUM_ROWS

------------------------------ ------------ ----------

EMP ???????????????????????????24-MAY-13 ???????????14

exec dbms_stats.gather_schema_stats( user );

?on commit delete rows;?会收不到统计信息

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读