■表和視圖不可以重名,但表可以和索引、約束同名。表名和列名都是不區(qū)分大小寫的,Oracle會(huì)先把名字轉(zhuǎn)換為大寫,
? 再把它們存儲(chǔ)在數(shù)據(jù)字典中。如果名字中用雙引號("")括起來,它會(huì)在oracle數(shù)據(jù)字典中成為區(qū)分大小寫的名字.
? 注意:
? 大對象數(shù)據(jù)類型的列不能出現(xiàn)在WHERE,GROUP BY或ORDER BY子句中。
? 不能在SQL*Plus等環(huán)境中查詢、顯示大對象類型的數(shù)據(jù),也不能通過INSERT語句插入大對象類型的數(shù)據(jù),否則會(huì)出錯(cuò)。
■
如果將表的存儲(chǔ)參數(shù)MAXEXTENTS設(shè)置為UNLIMITED,那么表就可以不受限制地自動(dòng)獲取所需要的存儲(chǔ)空間,并且減少浪費(fèi)
? 存儲(chǔ)空間和產(chǎn)生存儲(chǔ)碎片的可能.
■創(chuàng)建臨時(shí)表(事務(wù)臨時(shí)表/會(huì)話臨時(shí)表)
? 如果創(chuàng)建臨時(shí)表時(shí)沒有使用ON COMMIT關(guān)鍵字,則默認(rèn)創(chuàng)建的是事務(wù)臨時(shí)表。通過指定ON COMMIT DELETE ROWS關(guān)鍵字,
? 也可以指定創(chuàng)建事務(wù)臨時(shí)表。
■創(chuàng)建事務(wù)臨時(shí)表
? SQL> create global temporary table temp1????????????????????????????????????????????????????????????????????????????????????????????
? 2? (id number(9) primary key,?????????????????????????????????????????????????????????????????????????????????????????????????????
? 3? name varchar2(20));
?
事務(wù)臨時(shí)表的數(shù)據(jù)只在當(dāng)前事務(wù)內(nèi)可以查看,當(dāng)使用COMMIT或ROLLBACK結(jié)束事務(wù)后,其臨時(shí)數(shù)據(jù)會(huì)被自動(dòng)清除。
■創(chuàng)建會(huì)話臨時(shí)表
? 創(chuàng)建臨時(shí)表時(shí)通過
ON COMMIT PRESERVE ROWS
關(guān)鍵字指定創(chuàng)建會(huì)話臨時(shí)表。
? SQL> create global temporary table temp2????????????????????????????????????????????????????????????????????????????????????????????
? 2? (id number(9) primary key,?????????????????????????????????????????????????????????????????????????????????????????????????????
? 3? name varchar2(20)??????????????????????????????????????????????????????????????????????????????????????????????????????????????
? 4? )??????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????
? 5? on commit preserve rows;
區(qū)別:
???
事務(wù)臨時(shí)表是指數(shù)據(jù)只在當(dāng)前事務(wù)內(nèi)有效的臨時(shí)表。
??? 會(huì)話臨時(shí)表是指數(shù)據(jù)只在當(dāng)前會(huì)話內(nèi)有效的臨時(shí)表。
??
■標(biāo)準(zhǔn)表與索引表的區(qū)別
? 標(biāo)準(zhǔn)表 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 索引表
? 使用ROWID來惟一標(biāo)識(shí)一行記錄,并不一定要指定主鍵 ? ? ? ? ? ? ?使用主鍵來惟一標(biāo)識(shí)一行記錄,必須指定主鍵
? 對記錄的訪問是基于ROWID的 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 對記錄的訪問是基于主鍵的,或邏輯ROWID
? 通過順序掃描訪問返回的記錄 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 通過全索引掃描訪問返回的記錄
? ROWID偽列中保存的是物理ROWID ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?ROWID偽例中保存的是邏輯ROWIDE?
??
■創(chuàng)建一個(gè)索引結(jié)構(gòu)表
SQL> create table iot1??????????????????????????????????????????????????????????????????????????????????????????????????????????????
? 2? (ID number(9),?????????????????????????????????????????????????????????????????????????????????????????????????????????????????
? 3? name varchar2(20),?????????????????????????????????????????????????????????????????????????????????????????????????????????????
? 4? address varchar2(30),??????????????????????????????????????????????????????????????????????????????????????????????????????????
? 5? note varchar2(40),?????????????????????????????????????????????????????????????????????????????????????????????????????????????
? 6?
constraint pk_id primary key (id) validate?
?? ? ?-----指定主鍵 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ???
? 7? )??????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????
? 8?
organization index ? ?
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ------指明是索引表的關(guān)鍵字 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ???
? 9? pctthreshold 40????????????????????????????????????????????????????????????????????????????????????????????????????????????????
?10? including address ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?------非主鍵列 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ??
?11? overflow tablespace myts01; ? ? ? ? ? ? ? ? ? ? ? ?------溢出的數(shù)據(jù)存在myts01表空間
■通過查詢從一個(gè)表創(chuàng)建另一個(gè)表
? CREATE TABLE table_name AS SELECT <query>;
? 這個(gè)語法經(jīng)常用CTAS來表示.
? 在子查詢中可以引用一個(gè)或多個(gè)表(或視圖),查詢結(jié)果集中包含的列即是新表中定義的列,并且查詢到的記錄都會(huì)插入到新表中.
?
在使用CTAS創(chuàng)建表時(shí)要注意如下幾點(diǎn):
? ◆ 可以修改新表中列的名稱,但是不能修改列的數(shù)據(jù)類型和長度。新表中所有列的數(shù)據(jù)類型和長度都必須與查詢列一致。
? ◆ SELECT語句中不能包含大對象數(shù)據(jù)類型和long數(shù)據(jù)類型
? ◆ 約束條件及列的默認(rèn)值定義等都不會(huì)被復(fù)制
? ◆ 建議使用NOLOGGING選項(xiàng)。因?yàn)槿绻皇褂肗OLOGGING選項(xiàng),則每插入一條記錄都將會(huì)產(chǎn)生重做日志信息,占用了空間和時(shí)間。在決定是否使用
???? NOLOGGING選項(xiàng)時(shí),必須綜合考慮所獲得的收益和風(fēng)險(xiǎn)。通常只需要在創(chuàng)建大表時(shí)才使用NOLOGGING子句,以獲得較大的性能提升。
???
? SQL> create table new_emp???????????????????????????????????????????????????????????????????????????????????????????????????????????
? 2? as?????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????
? 3? select * from emp??????????????????????????????????????????????????????????????????????????????????????????????????????????????
? 4? noglogging;
??
? 使用CTAS創(chuàng)建表的時(shí)候不能指定表空間,否則會(huì)出錯(cuò).
? SQL> create table new_emp???????????????????????????????????????????????????????????????????????????????????????????????????????????
? 2? as?????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????
? 3? select * from emp??????????????????????????????????????????????????????????????????????????????????????????????????????????????
? 4? nologging??????????????????????????????????????????????????????????????????????????????????????????????????????????????????????
? 5? tablespace users;??????????????????????????????????????????????????????????????????????????????????????????????????????????????
? tablespace users
? *
? 第 5 行出現(xiàn)錯(cuò)誤:
? ORA-00933: SQL 命令未正確結(jié)束
??
■只復(fù)制表的結(jié)構(gòu),而不復(fù)制數(shù)據(jù).
? SQL> create table new_emp_1?????????????????????????????????????????????????????????????????????????????????????????????????????????
? 2? as?????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????
? 3? select * from emp??????????????????????????????????????????????????????????????????????????????????????????????????????????????
? 4?
where 1=2;????
????????????????????????????????????????????????????????????????????????????????????????????????????????????????
■只復(fù)制表的幾個(gè)列的結(jié)構(gòu)和數(shù)據(jù),并更改列名.使用NOLOGGING選項(xiàng)來避免生成重做日志文件記錄,減少創(chuàng)建表時(shí)所需的時(shí)間
?
■更改表
? ◆ 添加或刪除表中的列,或者修改表中列的定義(包括數(shù)據(jù)類型、長度、默認(rèn)值,以及NOT NULL約束等)
? ◆ 對表進(jìn)行重新命名
? ◆ 將表移動(dòng)到其他數(shù)據(jù)段或表空間中,以便重新組織表。
? ◆ 添加、修改或刪除表中的約束條件
? ◆ 激活或禁用表中的約束條件、觸發(fā)器等。
■添加列
?
語法:ALTER TABLE [schema.]table_name ADD (column_definition);
? 新添加的列總是位于表的末尾。對于現(xiàn)有的行而言,新增列的值為NULL,即無值.column_definition部分包括列名、列的數(shù)據(jù)類型
? 和將具用的任何默認(rèn)值.
SQL> alter table department add?????????????????????????????????????????????????????????????????????????????????????????????
? 2? (??????????????????????????????????????????????????????????????????????????????????????????????????????????????????????
? 3? leader varchar2(20),???????????????????????????????????????????????????????????????????????????????????????????????????
? 4? updatedate date default sysdate????????????????????????????????????????????????????????????????????????????????????????
? 5? );????????????????????????????????????????????????????????????????????????????????????????????????????????????????????
表已更改。
SQL> desc department;???????????????????????????????????????????????????????????????????????????????????????????????????????
?名稱????????????????????????????????????? 是否為空? 類型
?----------------------------------------- -------- --------------------
?DEPTID??????????????????????????????????? NOT NULL NUMBER(9)
?DEPTNO??????????????????????????????????? NOT NULL CHAR(2)
?NAME?????????????????????????????????????????????? VARCHAR2(20)
?ADDRESS??????????????????????????????????????????? VARCHAR2(30)
?LEADER???????????????????????????????????????????? VARCHAR2(20)
?UPDATEDATE???????????????????????????????????????? DATE
? SQL> select * from department;?????????????????????????????????????????????????????????????????????????????????????????????
??? DEPTID DE NAME???????????????? ADDRESS??????????????????????? LEADER?????????????? UPDATEDATE
---------- -- -------------------- ------------------------------ -------------------- --------------
???????? 5 5? 航天航空系統(tǒng)???????? 4 號樓????????????????????????????????????????????? 09-12月-06
? 在添加新列的時(shí)候,如果該表中已經(jīng)有行記錄了,那么就不能指定NOT NULL約束.
? 這時(shí)就需要用一個(gè)DEFAULT子句,再添加一個(gè)NOT NULL約束來完成這樣的工作,如下:
? SQL> alter table department add?????????????????????????????????????????????????????????????????????????????????????????????
? 2? (??????????????????????????????????????????????????????????????????????????????????????????????????????????????????????
? 3? node varchar2(40) not null?????????????????????????????????????????????????????????????????????????????????????????????
? 4? );?????????????????????????????????????????????????????????????????????????????????????????????????????????????????????
alter table department add
??????????? *
第 1 行出現(xiàn)錯(cuò)誤:
ORA-01758: 要添加必需的 (NOT NULL) 列, 則表必須為空
SQL> alter table department add?????????????????????????????????????????????????????????????????????????????????????????????
? 2? (??????????????????????????????????????????????????????????????????????????????????????????????????????????????????????
? 3? node varchar2(40) default '備注' not null??????????????????????????????????????????????????????????????????????????????
? 4? );????????????????????????????????????????????????????????????????????????????????????????????????????????????????????
表已更改。
■修改列
?
語法:ALTER TABLE [schema.]table_name MODIFY (column_name new_attributes);
? SQL> desc department;???????????????????????????????????????????????????????????????????????????????????????????????????????
?名稱????????????????????????????????????????????????????????????? 是否為空? 類型
?----------------------------------------------------------------- -------- -------------------------
?DEPTID??????????????????????????????????????????????????????????? NOT NULL NUMBER(9)
?DEPTNO??????????????????????????????????????????????????????????? NOT NULL CHAR(2)
?NAME?????????????????????????????????????????????????????????????????????? VARCHAR2(20)
?ADDRESS??????????????????????????????????????????????????????????????????? VARCHAR2(30)
?LEADER???????????????????????????????????????????????????????????????????? VARCHAR2(20)
?UPDATEDATE???????????????????????????????????????????????????????????????? DATE
?NODE????????????????????????????????????????????????????????????? NOT NULL VARCHAR2(40)
SQL> alter table department modify??????????????????????????????????????????????????????????????????????????????????????????
? 2? (??????????????????????????????????????????????????????????????????????????????????????????????????????????????????????
? 3? deptno char(6),????????????????????????????????????????????????????????????????????????????????????????????????????????
? 4? node varchar2(80)??????????????????????????????????????????????????????????????????????????????????????????????????????
? 5? );????????????????????????????????????????????????????????????????????????????????????????????????????????????????????
表已更改。
SQL> desc department;???????????????????????????????????????????????????????????????????????????????????????????????????????
?名稱????????????????????????????????????????????????????????????? 是否為空? 類型
?----------------------------------------------------------------- -------- --------------------------
?DEPTID??????????????????????????????????????????????????????????? NOT NULL NUMBER(9)
?DEPTNO??????????????????????????????????????????????????????????? NOT NULL CHAR(6)
?NAME?????????????????????????????????????????????????????????????????????? VARCHAR2(20)
?ADDRESS??????????????????????????????????????????????????????????????????? VARCHAR2(30)
?LEADER???????????????????????????????????????????????????????????????????? VARCHAR2(20)
?UPDATEDATE???????????????????????????????????????????????????????????????? DATE
?NODE????????????????????????????????????????????????????????????? NOT NULL VARCHAR2(80)
■下面以刪除department表中的updatedate列的sysdate默認(rèn)值為例,介紹刪除列的約束.
? SQL> alter table department modify??????????????????????????????????????????????????????????????????????????????????????????
? 2? (updatedate default null);?????????????????????????????????????????????????????????????????????????????????????????????
? 表已更改。
? SQL> insert into department?????????????????????????????????????????????????????????????????????????????????????????????????
? 2? (deptid,deptno,name,address)???????????????????????????????????????????????????????????????????????????????????????????
? 3? values?????????????????????????????????????????????????????????????????????????????????????????????????????????????????
? 4? (4,'04','航天航空系','4 號樓');???????????????????????????????????????????????????????????????????????????????????????
已創(chuàng)建 1 行。
SQL> select deptid,deptno,name,address,updatedate,node from department;????????????????????????????????????????????????????
??? DEPTID DEPTNO NAME???????????????? ADDRESS??????????????????????? UPDATEDATE???? NODE
---------- ------ -------------------- ------------------------------ -------------- ----------------
???????? 5 5????? 航天航空系統(tǒng)???????? 4 號樓???????????????????????? 09-12月-06???? 備注
???????? 4 04???? 航天航空系?????????? 4 號樓??????????????????????????????????????? 備注
?
■對列定義不是可以任意修改的,下面是用于修改列定義的一些原則
? ◆ 可以增大字符型列的長度和數(shù)據(jù)值型列的精度.如果表中有許多行,那么增大一個(gè)CHAR列的長度將需要許多資源,因?yàn)樗羞@些行的列數(shù)據(jù)
???? 都需要添加空格以添補(bǔ)額外增大的長度.
? ◆ 如果相關(guān)列中所有的數(shù)據(jù)都可以符合新的長度,那么可以減小VARCHAR2列的長度,并減小數(shù)值型列的精度(precision),或者增大一個(gè)數(shù)值型
???? 列的尺度(scale)
? ◆ 如果參數(shù)BLANK_TRIMMING被設(shè)置TRUE,那么可以降低一個(gè)非空CHAR列的長度.
? ◆ 為了更改數(shù)據(jù)類型,相關(guān)的列值必須為NULL.
? ◆ 如果不減小其長度,那么可以把數(shù)據(jù)類型從CHAR更改為VARCHAR2或反過來,即使相關(guān)的列不為空也可以.
■刪除列
? 直接刪除(全部刪除)?
? 語法:ALTER [schema.]table_name?
?????? DROP (colum_names) [CASCADE CONSTRAINTS];
? 可以在括號中使用多個(gè)列名,每個(gè)列名用逗號分隔.相關(guān)列的索引和約束也會(huì)被刪除.如果刪除的列是一個(gè)多列約束的組成部分,
? 那么就必須指定CASCADE CONSTRAINTS選項(xiàng),這樣才會(huì)刪除相關(guān)的約束
? SQL> alter table department
? 2? drop (updatedate,node)
? 3? cascade constraints;
? SQL> desc department;???????????????????????????????????????????????????????????????????????????????????????????????????????
?名稱????????????????????????????????????? 是否為空? 類型
?----------------------------------------- -------- ----------------------------
?DEPTID??????????????????????????????????? NOT NULL NUMBER(9)
?DEPTNO??????????????????????????????????? NOT NULL CHAR(6)
?NAME?????????????????????????????????????????????? VARCHAR2(20)
?ADDRESS??????????????????????????????????????????? VARCHAR2(30)
?LEADER???????????????????????????????????????????? VARCHAR2(20)
■將其標(biāo)記為UNUSED狀態(tài)(部分刪除)
?
如果要?jiǎng)h除一個(gè)大表中的列,由于必須對每條記錄進(jìn)行處理,故刪除操作可能會(huì)執(zhí)行很長的時(shí)間.為了避免在數(shù)據(jù)庫使用高峰期間由于執(zhí)行刪除列
? 的操作而占用過多的系統(tǒng)資源,可以暫時(shí)將刪除的列的設(shè)置為UNUSED狀態(tài).
? 語法:ALTER TABLE [schema.]table_name
?????? SET UNUSED (colum_names) [CASCADE CONSTRAINTS];
SQL> alter table department set unused??????????????????????????????????????????????????????????????????????????????????????
? 2? (address,leader)???????????????????????????????????????????????????????????????????????????????????????????????????????
? 3? cascade constraints;
? 從用戶角度來看,被設(shè)置為UNUSED狀態(tài)的列與被刪除的列之間是沒有區(qū)別的,都無法通過查詢或在數(shù)據(jù)字典中看到,并且可以為表添加與UNUSED狀態(tài)
? 的列具有相同名稱的新列.但是實(shí)際上UNUSED狀態(tài)的列仍然被保存在表中,它們所占用的存儲(chǔ)空間并沒有被釋放.
?
表中被標(biāo)記為UNUSED狀態(tài)的列可以在以后適當(dāng)?shù)臅r(shí)候再刪除,其語法:
? ALTER TABLE [schema.]table_name DROP UNUSED COLUMNS;
? SQL> alter table department?????????????????????????????????????????????????????????????????????????????????????????????????
? 2? drop unused columns;?
??
? 在數(shù)據(jù)字典視圖USER_UNUSED_COL_TABLS,ALL_UNUSED_COL_TABS和DBA_UNUSED_COL_TABS中可以查看數(shù)據(jù)庫中哪些表有幾個(gè)被標(biāo)記為UNUSED狀態(tài).
■給表或列添加注釋
? SQL> comment on table new_emp IS????????????????????????????????????????????????????????????????????????????????????????????
? 2? '這是一個(gè)通過CTAS方法創(chuàng)建的表.?????????????????????????????????????????????????????????????????????????????????????????
? 3? 既創(chuàng)建了表的結(jié)構(gòu)和表的記錄';?
?
? 如果要想顯示關(guān)于表的注釋,可以查詢DBA_TAB_COMMENTS,ALL_TAB_COMMENTS或者USER_TAB_COMMENTS.
? SQL> select table_name,table_type,comments
? 2? from user_tab_comments
? 3? where table_name='NEW_EMP';
TABLE_NAME???????????????????? TABLE_TYPE? COMMENTS
------------------------------ ----------- -----------------------------------------------
NEW_EMP??????????????????????? TABLE?????? 這是一個(gè)通過CTAS方法創(chuàng)建的表.
■給列或列添加注釋
? SQL> comment on column new_emp.ename IS?????????????????????????????????????????????????????????????????????????????????????
? 2? '這是雇員的姓名';
? 如果要想顯示關(guān)于列的注釋,可以查詢DBA_COL_COMMENTS,ALL_COL_COMMENTS或者USER_TAB_COMMENTS.
? SQL> select table_name,column_name,comments
? 2? from user_col_comments
? 3? where table_name='NEW_EMP'
? 4* AND column_name='ENAME'
TABLE_NAME???????????????????? COLUMN_NAME??????????????????? COMMENTS
------------------------------ ------------------------------ ------------------------------
NEW_EMP??????????????????????? ENAME????????????????????????? 這是雇員的姓名
■重新命名表和重新組織表
? 當(dāng)重新命名表時(shí),oracle自動(dòng)把舊表上的視圖、對象權(quán)限和約束條件轉(zhuǎn)換到新表名上,但oracle會(huì)使所有與舊表相關(guān)的對象(如視圖、同義詞、
? 存儲(chǔ)過程、函數(shù))失效,如果要使用,需要重新定義或編譯。
■RENAME語句
? 語法: RENAME old_tablename TO new_tablename
■ALTER TABLE語句
? SQL> ALTER TABLE new_emp RENAME TO new_emp_change;
■重新組織表
? SQL> alter table new_emp MOVE;
■重新組織表并移到其它表空間中
? SQL> alter table new_emp move???????????????????????????????????????????????????????????????????????????????????????????????
? 2? tablespace myts01;
??
? 使用ALTER TABLE ... MOVE 語句重新組織表時(shí),有如下幾個(gè)值得注意的地方。
? ◆ 直接到表被完全移到新的數(shù)據(jù)段中之后,Oracle才會(huì)刪除原來的數(shù)據(jù)段.因此在進(jìn)行移動(dòng)時(shí),必須保證表空間有足夠的空閑空間.
? ◆ 執(zhí)行ALTER TABLE ... MOVE語句重新組織表時(shí),ROWID會(huì)發(fā)生改變,從而導(dǎo)致表的所有有索引轉(zhuǎn)變?yōu)闊o效狀態(tài),所以在重新組織表
???? 之后必須重新建立索引.
? ◆ 如果表中包含LOB列,這個(gè)語句可用于將表連同用戶明確指定的LOB數(shù)據(jù)和LOB索引段(與該表相關(guān)的)一起移動(dòng).如果沒有指定,則
???? 默認(rèn)不多動(dòng)LOB數(shù)據(jù)和LOB索引段.
■刪減表和刪除表
■刪減表(p530)
? 刪減表就是刪除表中所有的記錄,使表成為一個(gè)只有結(jié)構(gòu)而沒有數(shù)據(jù)的一個(gè)空表.
? 在Oracle中,如果要?jiǎng)h除表中所有的記錄,可以使用如下三種方法之一
? 方法一:
? SQL> delete from new_emp;
? 方法二:
? SQL> drop table new_emp;
? SQL> create table new_emp
?????? AS select * from emp
?????? nologging;
? 方法三:(最佳方法)
?
SQL> truncate table new_emp;
???
? TRUNCATE語句提供了一種快速、高效、最低代價(jià)的刪除表中所有記錄的方法。TRUNCATE語句屬于DDL語句,不會(huì)產(chǎn)生任何回退信息,
? 并且是被自動(dòng)立即提交的。因此TRUNCATE操作也不能被回退。
? 在執(zhí)行TRUNCATE語句時(shí),不會(huì)影響到與被刪減表相關(guān)的任何數(shù)據(jù)庫對象和授權(quán),也不會(huì)觸發(fā)表中定義的觸發(fā)器。此外,在對表進(jìn)行
? 刪減后,已經(jīng)為表分配的存儲(chǔ)空間將被回收。無論從內(nèi)容上還是從結(jié)構(gòu)上看,刪減后的表都成為了一個(gè)空表。
? TRUNCATE語句刪減表中所有記錄是最佳的方法。
■刪除表
?語法: drop table [schema.]table_name [cascade constraints]
?SQL> drop table new_emp;
?SQL> drop table new_emp CASCADE CONSTRAINTS;
■約束分類
?
- NOT NULL(非空)約束
?- UNIQUE(唯一)約束
?- CHECK(檢查)約束
?- PRIMARY KEY(主鍵)約束
?- FOREIGN KEY(外鍵)約束
■約束的狀態(tài)
? -----------------------------------------------
? 分類方式??狀態(tài)?
? -----------------------------------------------
? 檢查新數(shù)據(jù) ??激活?ENABLE
? ???禁用?DISABLE
? 檢查老數(shù)據(jù)??驗(yàn)證?VALIDATE
???非驗(yàn)證 NOVALIDATE
? 兩類狀態(tài)的組合?激活驗(yàn)證 ENABLE VALIDATE
???????????????????? 激活非驗(yàn)證 ENABLE NOVALIDATE
???????????????????? 禁用驗(yàn)證 DISABLE VALIDATE
???????????????????? 禁用非驗(yàn)證 DISABLE NOVALIDATE
■列級定義
? 語法:column [CONSTRAINT constraint_name] constraint_type [condition]
■表級定義
? 語法:[CONSTRAINT constraint_name] constraint_type ([col1,col2,...] | [condition])
? 注意:不能在具有大對象(CLOB,NCLOB,BLOB,BFILE)、二進(jìn)制(LONG和LONG RAW)或
??????? TIMESTAMP WITH TIMEZONE數(shù)據(jù)類型的列上定義約束。
? SQL> create table student
? 2? (
? 3? stuid number(9) NOT NULL,?? ---> 列級定義
? 4? stuno char(10),
? 5? name varchar2(20) NOT NULL, ---> 列級定義
? 6? sex char(1),
? 7? birthday date,
? 8? photo blob,
? 9? deptid number(9),
?10? CONSTRAINT pk_student PRIMARY KEY (stuid) VALIDATE,??? ---> 表級定義
?11? CONSTRAINT chk_sex CHECK (sex in('1','0')) VALIDATE,?? ---> 表級定義
?12? CONSTRAINT fk_deptid FOREIGN KEY (deptid) REFERENCES department(deptid) VALIDATE?? ---> 表級定義
?13? )
?SQL> /
更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號聯(lián)系: 360901061
您的支持是博主寫作最大的動(dòng)力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點(diǎn)擊下面給點(diǎn)支持吧,站長非常感激您!手機(jī)微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點(diǎn)擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對您有幫助就好】元
