溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

1Z0-051-DDL-1表和臨時(shí)表的創(chuàng)建和使用

發(fā)布時(shí)間:2020-04-06 19:47:54 來(lái)源:網(wǎng)絡(luò) 閱讀:391 作者:PengChonggui 欄目:數(shù)據(jù)庫(kù)

一、創(chuàng)建簡(jiǎn)單表

 

1.1  使用列規(guī)范創(chuàng)建表

 

語(yǔ)法:

CREATETABLE [schema.]tablename [ORGANIZATION HEAP]

(columndatatype [default expression]

[,columndatatype [default expression]]

);

 

注:DEFAULT 字句可能很有用,但它功能很有限。

 

分析以下案例:

CREATETABLE SCOTT.EMP

(EMPNONUMBER(4),

ENAMEVARCHAR2(10),

HIREDATEDATE DEFAULT TRUNC(SYSDATE),

SAL NUMBER(7,2),

COMM NUMBER(7,2) DEFAULT 0.03

);

 

SET LONG9999

Select  dbms_metadata.get_ddl('TABLE','EMP','SCOTT')FROM DUAL;

 

 

1.2  使用子查詢創(chuàng)建表

語(yǔ)法:

CREATETABLE  [schema.]table  AS subquery;

 

SQL>create tabel emp_copy as select * from scott.emp;

 

SQL>createtable emp_dept as select

Last_nameename,department_name dname,round(sysdate -hiredate) service

From  employees nutural join departments orderby  dname,ename;

 

創(chuàng)建一個(gè)沒(méi)有數(shù)據(jù)行的表:

SQL>createtable no_emps as select * from scott.emp where 1=2;

 

 

 

1.3.在創(chuàng)建表之后更改表的定義

 

1)添加列

SQL>altertable emp add (job_id number(8));

 

2)修改列

SQL>alter table emp modify (commission_pct number(6,2) default 0.05;

 

3)刪除列

SQL>altertable emp drop column job_id;

 

4)標(biāo)記未使用列

SQL>altertable  emp set unused column job_id;

 

5)重命名列

SQL>altertable emp rename column hire_date to hiredate;

 

6)將表標(biāo)記為只讀

SQL>altertable emp read only;

 

7)一次性刪除未使用的列

SQL>altertable emp drop unused columns;

 

 

1.4 刪除表

 

語(yǔ)法:

Drop   table  [schema.]tablename;

 

SQL>droptable  emp;  

注:刪除表之前不會(huì)生成警告(任何DDL命令都一樣,他們包含了COMMIT),一般不可逆,在一定特定的情況下,可使用閃回技術(shù)和其他恢復(fù)技術(shù)。

 

1.5 截?cái)啾?/span>

 

語(yǔ)法:

Trancate  table  [schema.]tablename;

SQL>trancate table emp;

注:瞬間清空emp表,表中有一條記錄和一億條記錄的速度是一樣的。

 

1.6 創(chuàng)建和使用臨時(shí)表

臨時(shí)表包含所有會(huì)話都可以訪問(wèn)的定義,但其中的行是插入行的會(huì)話專用的。

語(yǔ)法:

Create  global temporary table temp_tab_name

(columndatatype [,column datatype])

On commit{delete |preserve} rows;

 

列的定義與普通表沒(méi)有區(qū)別,末尾的可選句子確定插入的任何行的生命周期。默認(rèn)方式:在插入行的事務(wù)完成時(shí),刪除相應(yīng)的行,但也可以更改此行為,以便將他們保留到插入行的會(huì)話結(jié)束為止。臨時(shí)表的數(shù)據(jù)是臨時(shí)的,專用于相應(yīng)的會(huì)話,針對(duì)其執(zhí)行的所有SQL命令速度遠(yuǎn)比針對(duì)永久表的命令塊。

速度快的原因:

1)臨時(shí)表不是永久表空間中的段。

2)針對(duì)臨時(shí)表的DML不生成重做數(shù)據(jù)。

 

【創(chuàng)建和使用臨時(shí)表案例】

1)使用peenboo身份登錄,創(chuàng)建臨時(shí)表tmp_emp

SQL>createglobal temporary table tmp_emp on commit preserve rows  as select * from emp where 1=2;

 

2)插入一些數(shù)據(jù):

SQL>Insertinto tmp_emp select * from emp where department_id=50;

SQL>commit;

 

3)使用peenboo身份,啟動(dòng)第二個(gè)SQLPLUS

SQL>selectcount(*) from tmp_emp;

SQL>insertinto tmp_emp select * from emp where department_id =60;

SQL>commit;

 

4)在第一個(gè)會(huì)話中截?cái)啾恚?/span>

SQL>truncate  table tmp_emp;

 

5)在第二個(gè)會(huì)話中查詢,會(huì)話副本仍然包含行:

SQL>selectcount(*) from tmp_emp;

 

6)在第二個(gè)會(huì)話中,演示會(huì)話終止并不會(huì)清除數(shù)據(jù)行。需要斷開(kāi)連接再次連接。

SQL>disconnect;

SQL>connectpeenboo/dbbocom

SQL>selectcount(*) from tmp_emp;


向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI