chap6管理和維護表_第1頁
chap6管理和維護表_第2頁
chap6管理和維護表_第3頁
chap6管理和維護表_第4頁
chap6管理和維護表_第5頁
已閱讀5頁,還剩71頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領

文檔簡介

1、chap6 管理和維護表王之倉 青海師范大學6.1 表的概述在Oracle數(shù)據(jù)庫中,每個關系表都由許多列組成。給每一列指派特定的數(shù)據(jù)類型來定義將在這個列中存儲得數(shù)據(jù)類型。一、 標量數(shù)據(jù)類型1、CHAR 最多可以以固定長度的格式存儲2000個字符或字節(jié)。默許指定為以字符方式進展存儲,這個數(shù)據(jù)類型是固定長度的,并且當位數(shù)不夠時,需求在其右邊添加空格來補滿。 CREATE TABLE test(name char(20)2、VARCHAR和VARCHAR2 最多可以以可變長度來存儲4000B,因此不需求空格來作補充。VARCHAR2 比 VARCHAR 更適宜運用,由于兼容性的緣由,所以依然在 Or

2、acle 數(shù)據(jù)庫中保管著 VARCHAR 。 CREATE TABLE test(name varchar2(20)一、標量數(shù)據(jù)類型3、NCHAR NLSnational language support , 國際言語支持的數(shù)據(jù)類型僅可以存儲由數(shù)據(jù)庫 NLS 字符集定義的 Unicode 字符集。該數(shù)據(jù)類型最多可以存儲2000B。NCHAR 的列在位數(shù)不夠時需求在右邊填充空格。CREATE TABLE test(name Nchar(20)留意:在 Oracle9i 數(shù)據(jù)庫及其更新的版本中,僅運用 Unicode 數(shù)據(jù)類型4、NVARCHAR2NLS 的數(shù)據(jù)類型與 VARCHAR2 數(shù)據(jù)類型等

3、價。這個數(shù)據(jù)類型最多可存儲4000B 。CREATE TABLE test(name Nvarchar2(20)留意:在 Oracle9i 數(shù)據(jù)庫及其更新的版本中,僅運用 Unicode 數(shù)據(jù)類型一、標量數(shù)據(jù)類型5、NUMBER用于存儲零、正數(shù)、定長負數(shù)以及浮點數(shù)。以 NUMBER(P,S)的方式來定義數(shù)字的精度和范圍。 p 表示精度 1-38,它表示存儲在列中數(shù)字的總長度是 p 位。 s 表示范圍,它表示小數(shù)點后的位數(shù)。該取值范圍可以從-84 到 127 。#運用精度 5 來定義一個正數(shù)如 12345CREATE TABLE test(name number(5)#運用精度 5 和范圍 2

4、來定義一個數(shù)字。如 12.34。CREATE TABLE test(name number(5,2)6、LONGLONG 類型的列存儲可變長度的字符串,最多可以存儲 2GB 的數(shù)據(jù)。LONG 類型的列有很多在 VARCHAR2 類型列中所具有的特征??梢赃\用 LONG 類型的列來存儲 LONG 類型的文本字符串。LONG 數(shù)據(jù)類型的運用是為了向前兼容的需求。建議運用 LOB 數(shù)據(jù)類型來替代 LONG 類型。例如:CREATE TABLE test(name long)一、標量數(shù)據(jù)類型7、DATE用于在數(shù)據(jù)庫中存儲日期和時間。存儲時間的精度可以到達 1/100s。不提供時區(qū)的相關信息。CREAT

5、E TABLE test(name DATE)8、TIMESTAMP運用年、月、日、小時、分鐘、秒域來對日期/時間提供更詳細的支持。最多可以運用 9 位數(shù)字的精度來存儲秒受底層操作系統(tǒng)支持的限制。這個數(shù)據(jù)類型沒有時區(qū)的相關信息,CREATE TABLE test(timestamp_column TIMESTAMP);一、標量數(shù)據(jù)類型9、RAW用于存儲 raw 類型的二進制數(shù)據(jù)。最多可以存儲 2000B。建議運用 BLOB 來替代它。CREATE TABLE test(raw_column RAW(2000);10、LONG RAW用于存儲 raw 類型的二進制數(shù)據(jù)。最多可以存儲 2GB 的數(shù)

6、據(jù)。建議運用BLOB來替代它。CREATE TABLE test(raw_column LONG RAW);一、標量數(shù)據(jù)類型11、CLOB用于存儲基于字符的大對象。可存儲4GB。CREATE TABLE test(clob_column CLOB);13、BLOB最多可以存儲 4GB 數(shù)據(jù)的二進制大對象,比如照片、PPT、二進制圖像等。CREATE TABLE test(blob_column BLOB);一、標量數(shù)據(jù)類型14、BFILE存儲指向數(shù)據(jù)庫外部文件的定位符。外部文件最大為 4GB。CREATE TABLE test(bfile_column BFILE);二、集合數(shù)據(jù)類型-嵌套表

7、一種數(shù)據(jù)發(fā)掘模型配置,該配置中表的一個列包含一個表。1、嵌套表的定義 嵌套表是表中之表。一個嵌套表是某些行的集合,它在主表中表示為其中的一列。對主表中的每一條記錄,嵌套表可以包含多個行。在某種意義上,它是在一個表中存儲一對多關系的一種方法。調(diào)查一個包含部門信息的表,在任何時間內(nèi)每個部門會有很多工程正在實施。在一個嚴厲的關系模型中,將需求建立兩個獨立的表department和project。 二、集合數(shù)據(jù)類型-嵌套表2 舉例闡明嵌套表的運用假設有一個關于動物豢養(yǎng)員的表,希望其中具有他們豢養(yǎng)的動物的信息。用一個嵌套表,就可以在同一個表中存儲豢養(yǎng)員和其豢養(yǎng)的全部動物的信息。1創(chuàng)建類型animal_t

8、y:此類型中,對于每個動物都包含有一個記錄,記載了其種類、稱號和出生日期信息。CREATE TYPE animal_ty AS OBJECT (breed varchar2(25),name varchar2(25),birthdate date);2創(chuàng)建animals_nt:此類型將用作一個嵌套表的根底類型。CREATE TYPE animal_nt as table of animal_ty;3創(chuàng)建表breeder:豢養(yǎng)員的信息表create table breeder(breedername varchar2(25),animals animal_nt)nested table anim

9、als store as animals_nt_tab;二、集合數(shù)據(jù)類型-嵌套表3、向嵌套表中插入記錄insert into breeder values(mary,animal_nt(animal_ty(dog,butch,31-MAR-97), animal_ty(dog,rover,31-MAR-97), animal_ty(dog,julio,31-MAR-97) );insert into breeder values(jane,animal_nt(animal_ty(cat,an,31-MAR-97), animal_ty(cat,jame,31-MAR-97), animal_t

10、y(cat,killer,31-MAR-97);commit;二、集合數(shù)據(jù)類型-嵌套表4、查詢嵌套表select name,birthdate from table(select animals from breeder);select name,birthdate from table (select animals from breeder where breedername=mary)where name=dog;二、集合數(shù)據(jù)類型2-VARRY固定長度(長度運用extend方法添加)一維數(shù)組(相當于類,有其方法和構(gòu)造方法【類型名】)序號延續(xù)對象類型create or replace ty

11、pe type_name as varry(3) of varchar(20)或者在程序的定義區(qū)中聲明:type type_name is varry(3) of varchar(20);初始化:object_name type_name :=type_name();賦值: object_name(i):=n;三、關系數(shù)據(jù)類型-游標Cursor1 概念 游標是SQL的一個內(nèi)存任務區(qū),由系統(tǒng)或用戶以變量的方式定義。游標的作用就是用于暫時存儲從數(shù)據(jù)庫中提取的數(shù)據(jù)塊。在某些情況下,需求把數(shù)據(jù)從存放在磁盤的表中調(diào)到計算機內(nèi)存中進展處置,最后將處置結(jié)果顯示出來或最終寫回數(shù)據(jù)庫。這樣數(shù)據(jù)處置的速度才會提高

12、,否那么頻繁的磁盤數(shù)據(jù)交換會降低效率。 三、關系數(shù)據(jù)類型-游標Cursor2 類型 Cursor類型包含三種: 隱式Cursor顯式CursorRef Cursor動態(tài)Cursor 四、ROWID1.rowid的引見1SQL select ROWID from Bruce_test where rownum CREATE TABLE s_dept(id NUMBER(7) CONSTRAINT s_dept_id_pk PRIMARY KEY,name VARCHAR2(25) CONSTRAINT s_dept_name_nn NOT NULL,region_id NUMBER(7) CON

13、STRAINT s_dept_region_id_fk REFERENCES region (id), CONSTRAINT s_dept_name_region_id_uk UNIQUE(name, region_id);經(jīng)過子查詢建表的例子SQLCREATE TABLE emp_41 AS SELECT id, last_name, userid, start_dateFROM s_emp WHERE dept_id = 41;在 SQL Developer中創(chuàng)建表Oracle SQL Developer提供了所見即所得的數(shù)據(jù)表設計器窗口,可以經(jīng)過導航面板的樹狀視圖,展開數(shù)據(jù)庫銜接節(jié)點,右

14、擊數(shù)據(jù)表節(jié)點,選擇新建表.菜單項,將顯示表設計器窗口。在創(chuàng)建表窗口中,可以經(jīng)過添加列按鈕添加新的列,從下拉列表框中選擇列數(shù)據(jù)類型及約束,并可單擊DDL標簽頁來查看創(chuàng)建表的數(shù)據(jù)定義言語。創(chuàng)建表時的命名規(guī)那么和本卷須知命名規(guī)那么1)表名和字段名的命名規(guī)那么:必需以字母開頭,可以含符號A-Z,a-z,0-9,_,$,#2)大小寫不區(qū)分3)不用SQL里的保管字, 一定要用時可用雙引號把字符串括起來4)用和實體或?qū)傩韵嚓P的英文符號長度有一定的限制本卷須知:1)建表時可以用中文的字段名, 但最好還是用英文的字段名2)創(chuàng)建表時要把較小的不為空的字段放在前面, 能夠為空的字段放在后面3)建表時假設有獨一關鍵字

15、或者獨一的約束條件,建表時自動建了索引4)一個表的最多字段個數(shù)也是有限制的,254個.約束名的命名規(guī)那么和語法約束名的命名規(guī)那么約束名假設在建表的時候沒有指明,系統(tǒng)命名規(guī)那么是SYS_Cn(n是數(shù)字)約束名字符串的命名規(guī)那么同于表和字段名的命名規(guī)那么創(chuàng)建invoice表并指定主鍵CREATE TABLE invoice (invoice_id NUMBER PRIMARY KEY, -自動編號,獨一,不為空vendor_id NUMBER NOT NULL, -供應商ID invoice_number VARCHAR2(50) NOT NULL, -發(fā)票編號 invoice_date DATE

16、 DEFAULT SYSDATE, -發(fā)票日期 invoice_total NUMBER(9,2) NOT NULL, -發(fā)票總數(shù) payment_total NUMBER(9,2) DEFAULT 0 -付款總數(shù) ) 在列屬性中運用CONSTRAINT關鍵字CREATE TABLE invoice ( -自動編號,獨一,不為空invoice_id NUMBER CONSTRAINT invoice_pk PRIMARY KEY, -供應商IDvendor_id NUMBER CONSTRAINT vendor_id_nn NOT NULL, -發(fā)票編號invoice_number VARCH

17、AR2(50) CONSTRAINT vendor_number_nn NOT NULL, -發(fā)票日期invoice_date DATE DEFAULT SYSDATE, -發(fā)票總數(shù)invoice_total NUMBER(9,2) CONSTRAINT invoice_total_nn NOT NULL, -付款總數(shù)payment_total NUMBER(9,2) DEFAULT 0 ) ;在表級別運用CONSTRAINT關鍵字CREATE TABLE invoice ( invoice_id NUMBER , -自動編號,獨一,不為空 vendor_id NUMBER, -供應商ID i

18、nvoice_number VARCHAR2(50), -發(fā)票編號 invoice_date DATE DEFAULT SYSDATE, -發(fā)票日期 invoice_total NUMBER(9,2) , -發(fā)票總數(shù) payment_total NUMBER(9,2) DEFAULT 0, -付款總數(shù) CONSTRAINT invoice_pk PRIMARY KEY (invoice_id), CONSTRAINT vendor_id_un UNIQUE (vendor_id) ); 外鍵的定義1 vendor表的定義代碼CREATE TABLE vendors ( vendor_id NU

19、MBER, -供應商id vendor_name VARCHAR2(50) NOT NULL, -供應商稱號 CONSTRAINT vendors_pk PRIMARY KEY (vendor_id), -主鍵 CONSTRAINT vendor_name_uq UNIQUE (vendor_name) -獨一性約束 ) 外鍵的定義2 在invoice表中為vendor_id列創(chuàng)建外鍵關聯(lián)CREATE TABLE invoice ( invoice_id NUMBER , -自動編號,獨一,不為空 vendor_id NUMBER REFERENCES vendors (vendor_id),

20、 -供應商ID invoice_number VARCHAR2(50), -發(fā)票編號 invoice_date DATE DEFAULT SYSDATE, -發(fā)票日期 invoice_total NUMBER(9,2) , -發(fā)票總數(shù) payment_total NUMBER(9,2) DEFAULT 0, -付款總數(shù) CONSTRAINT invoiceid_vendorid_pk PRIMARY KEY (invoice_id,vendor_id), CONSTRAINT vendor_id_un UNIQUE (vendor_id) ); 外鍵的定義3 在invoice表級別創(chuàng)建外鍵關聯(lián)

21、CREATE TABLE invoice ( invoice_id NUMBER , -自動編號,獨一,不為空 vendor_id NUMBER, -供應商ID invoice_number VARCHAR2(50), -發(fā)票編號 invoice_date DATE DEFAULT SYSDATE, -發(fā)票日期 invoice_total NUMBER(9,2) , -發(fā)票總數(shù) payment_total NUMBER(9,2) DEFAULT 0, -付款總數(shù) CONSTRAINT invoiceid_vendorid_pk PRIMARY KEY (invoice_id,vendor_id

22、), CONSTRAINT vendor_id_un UNIQUE (vendor_id), CONSTRAINT invoice_fk_vendors FOREIGN KEY (vendor_id) REFERENCES vendors(vendor_id) ON DELETE CASCADE ); 6.2.2 創(chuàng)建暫時表一、認識暫時表目前一切運用 Oracle 作為數(shù)據(jù)庫支撐平臺的運用,大部分數(shù)據(jù)量比較龐大的系統(tǒng),即表的數(shù)據(jù)量普通情況下都是在百萬級以上的數(shù)據(jù)量。當然在 Oracle 中創(chuàng)建分區(qū)是一種不錯的選擇,但是當發(fā)現(xiàn)運用有多張表關聯(lián)的時候,并且這些表大部分都是比較龐大,而關聯(lián)的時候發(fā)現(xiàn)

23、其中的某一張或者某幾張表關聯(lián)之后得到的結(jié)果集非常小并且查詢得到這個結(jié)果集的速度非??欤敲催@個時候思索在 Oracle 中創(chuàng)建“暫時表。6.2.2 創(chuàng)建暫時表對暫時表的了解在 Oracle 中創(chuàng)建一張表,這個表不用于其他的什么功能,主要用于本人的軟件系一致些特有功能才用的,而當他用完之后表中的數(shù)據(jù)就沒用了。 Oracle 的暫時表創(chuàng)建之后根本不占用表空間,假設他沒有指定暫時表(包括暫時表的索引)存放的表空的時候,他插入到暫時表的數(shù)據(jù)是存放在 ORACLE 系統(tǒng)的暫時表空間中( TEMP )。6.2.2 創(chuàng)建暫時表二、暫時表的創(chuàng)建 創(chuàng)建Oracle 暫時表,可以有兩種類型的暫時表: 1 會話級的

24、暫時表 2 事務級的暫時表6.2.2 創(chuàng)建暫時表1) 會話級的暫時表 由于會話級暫時表中的數(shù)據(jù)和當前會話有關系,當當前SESSION 不退出的情況下,暫時表中的數(shù)據(jù)就還存在,而當退出當前SESSION 的時候,暫時表中的數(shù)據(jù)就全部沒有了,當然這個時候假設以另外一個SESSION 登陸的時候是看不到另外一個SESSION 中插入到暫時表中的數(shù)據(jù)的。即兩個不同的SESSION 所插入的數(shù)據(jù)是互不相關的。當某一個SESSION 退出之后暫時表中的數(shù)據(jù)就被截斷(truncate table ,即數(shù)據(jù)清空)了。6.2.2 創(chuàng)建暫時表會話級的暫時表創(chuàng)建方法:Create Global Temporary

25、Table Table_Name(Col1 Type1,Col2 Type2.) On Commit Preserve Rows ;舉例:create global temporary table Student(Stu_id Number(5),Class_id Number(5),Stu_Name Varchar2(8),Stu_Memo varchar2(200) on Commit Preserve Rows ;6.2.2 創(chuàng)建暫時表2 事務級暫時表 事務級暫時表是指該暫時表與事務相關,當進展事務提交或者事務回滾的時候,暫時表中的數(shù)據(jù)將自行被截斷,其他的內(nèi)容和會話級的暫時表的一致(包括

26、退出SESSION 的時候,事務級的暫時表也會被自動截斷)。6.2.2 創(chuàng)建暫時表事務級暫時表的創(chuàng)建方法:Create Global Temporary Table Table_Name(Col1 Type1,Col2 Type2.) On Commit Delete Rows ;舉例: create global temporary table Classes (Class_id Number(5), Class_Name Varchar2(8), Class_Memo varchar2(200) on Commit delete Rows ;6.2.2 創(chuàng)建暫時表3 兩種類型暫時表的區(qū)別

27、會話級暫時表采用 on commit preserve rows ;而事務級那么采用 on commit delete rows ; 用法上,會話級別只需當會話終了暫時表中的數(shù)據(jù)才會被截斷,而且事務級暫時表那么不論是 commit 、 rollback 或者是會話終了,暫時表中的數(shù)據(jù)都將被截斷 。6.2.2 創(chuàng)建暫時表4 什么時候運用暫時表 1 ) 當某一個 SQL 語句關聯(lián)的表在 2 張及以上,并且和一些小表關聯(lián)。可以采用將大表進展分拆并且得到比較小的結(jié)果集合存放在暫時表中 2 ) 程序執(zhí)行過程中能夠需求存放一些暫時的數(shù)據(jù),這些數(shù)據(jù)在整個程序的會話過程中都需求用的等等。6.2.2 創(chuàng)建暫時表

28、5 暫時表的缺乏之處 1 )不支持 lob 對象,這也許是設計者基于運轉(zhuǎn)效率的思索,但實踐運用中確實需求此功能時就無法運用暫時表了。 2 )不支持主外鍵關系 所以,由于以上緣由,可以本人創(chuàng)建暫時表,以彌補 oracle 暫時表的缺乏之處。閱讀資料:暫時表創(chuàng)建方法: 1 、以常規(guī)表的方式創(chuàng)建暫時數(shù)據(jù)表的表構(gòu)造,但要在每一個表的主鍵中參與一個 SessionID 列以區(qū)分不同的會話。(可以有 lob 列和主外鍵) 2 、寫一個用戶注銷觸發(fā)器,在用戶終了會話的時候刪除本次會話所插入的一切記錄 (SessionID 等于本次會話 ID 的記錄 ) 。 3 、程序?qū)懭霐?shù)據(jù)時,要順便將當前的會話 ID(S

29、essionID) 寫入表中。 4 、程序讀取數(shù)據(jù)時,只讀取與當前會話 ID 一樣的記錄即可。 功能加強的擴展設計: 1 、可以在數(shù)據(jù)表上建立一個視圖,視圖對記錄的挑選條件就是當前會話的SessionID 。 2 、數(shù)據(jù)表中的SessionID 列可以經(jīng)過Trigger 實現(xiàn),以實現(xiàn)對運用層的透明性。 3 、高級用戶可以訪問全局數(shù)據(jù),以實現(xiàn)更加復雜的功能。 擴展暫時表的優(yōu)點: 1 、實現(xiàn)了與Oracle 的基于會話的暫時表一樣的功能。 2 、支持SDO_GEOMETRY 等lob 數(shù)據(jù)類型。 3 、支持表間的主外鍵銜接,且主外鍵銜接也是基于會話的。 4 、高級用戶可以訪問全局數(shù)據(jù),以實現(xiàn)更加復

30、雜的功能。6.3 維護參數(shù)1 initransinitrans用于對數(shù)據(jù)塊的行級并行操作的控制。首先引見事務槽的概念,事務槽在數(shù)據(jù)塊頭中,存儲了有關事務的控制信息。數(shù)據(jù)塊中的每行數(shù)據(jù)有一個鎖位,該鎖位號與事務槽一樣,數(shù)據(jù)庫效力器就是經(jīng)過每行的鎖位找到數(shù)據(jù)塊頭中的事務槽,利用數(shù)據(jù)槽中的事務信息完成對該行數(shù)據(jù)的操作。每個事務只運用一個事務槽。 設initrans值為2,那么數(shù)據(jù)庫效力器在一個數(shù)據(jù)塊中最多有兩個并行的事務可以獨立、并行的經(jīng)過本人的事務槽,實現(xiàn)對共享數(shù)據(jù)塊中的行數(shù)據(jù)的事務操作。2 MAXTRANSMAXTRANS 指的是假設 INITRANS 空間不夠用了,就會自動擴展 ITL ,直到

31、最大值也就是 MAXTRANS 值為止,預設是 255 。但是,假設 BLOCK 空間曾經(jīng)缺乏,也有能夠無法繼續(xù)擴展到 255 個 ITS 空間喔。maxtrains定義了數(shù)據(jù)塊中數(shù)據(jù)槽的最大值。事務表會根據(jù)需求動態(tài)擴展,最大到達MAXTRANS 個條目假設塊上有足夠的自在空間。所分配的每個事務條目需求占用塊首部中的2324 字節(jié)的存儲空間。假設有大量的并發(fā)訪問運用的這個塊,那么參數(shù)不能太小,否那么資源競爭將導致系統(tǒng)并發(fā)性能下降。3 PCTFREE要描畫一個 BLOCK 的運作,我們可以把一個 BLOCK 想成一個水杯。侍者把水倒入放在我們面前的水杯,要多滿呢,我們要求他倒 9 分滿好了,這時

32、候 PCTFREE 代表著設定為 10 ,意思就是說,當 BLOCK 運用到達 90% 的時候,就不可以在運用了,這個 BLOCK 應該從 FREELIST 列表中移除 (un-link) 。為何要保管 10% 的空間呢?這是為了提供 update 數(shù)據(jù)時所能夠添加的空間運用,假設空間保管的太小,就容易發(fā)生 row chaining 。假設希望在對象創(chuàng)建后更改pctfree參數(shù),可經(jīng)過以下命令SQL alter table t1 pctfree 20;Table altered. 可經(jīng)過dba_tables,dba_indexes查看pct_free的參數(shù)值,例如如下SQL select ta

33、ble_name,pct_free from user_tables where table_name=T1 TABLE_NAME PCT_FREE- -T1 20 4 pctused 當一個block閱歷delete操作使已運用空間降到pctused值后,此塊重新被參與freelist,后續(xù)的insert將會用到這個block。總結(jié):pctfree 很重要,但對于查詢系統(tǒng)根本上可以設置為0pctused 由于10g以后oracle都采用位圖對段和數(shù)據(jù)塊進展管理了,這個參數(shù)根本可以淘汰initrans ,很重要,但假設不是特別設置,不要去修正。maxtrans ,至少10g以上不用了,屬于淘汰

34、行列。6.4 維護列添加列 語法:ALTER TABLE table_name ADD(new_column_name datatypeDEFAULT value NOT NULL);例子:ALTER TABLE employee ADD(phone VARCHAR2(10),hiredate DATE DEFAULT SYSDATE NOT NULL);留意:為表添加列時應留意,假設表中曾經(jīng)有數(shù)據(jù),那么新列不能用NOT NULL約束,除非為新列設置缺省值,在默許情況下,新插入列的值為NULL。1 添加列 語法:ALTER TABLE table_name ADD(new_column_nam

35、e datatypeDEFAULT value NOT NULL);例子:ALTER TABLE employee ADD(phone VARCHAR2(10),hiredate DATE DEFAULT SYSDATE NOT NULL);留意:為表添加列時應留意,假設表中曾經(jīng)有數(shù)據(jù),那么新列不能用NOT NULL約束,除非為新列設置缺省值,在默許情況下,新插入列的值為NULL。2 修正列名語法:ALTER TABLE table_name RENAME COLUMN oldname TO newname;舉例:ALTER TABLE employee RENAME COLUMN ename

36、 TO employee_name;3 修正列類型語法:ALTER TABLE table_name MODIFY column_name new_datatype;舉例:ALTER TABLE employee MODIFY ename CHAR(20);留意:可以增大字符類型列的長度和數(shù)值類型列的精度;假設字符類型列、數(shù)值類型列中的數(shù)據(jù)滿足新的長度、精度,那么可以減少類型的長度、精度;假設不改動字符串的長度,可以將VARCHAR2類型和CHAR類型轉(zhuǎn)換;假設更改數(shù)據(jù)類型為另一種非同系列類型,那么列中數(shù)據(jù)必需為NULL。刪除列當某些列不再需求時,可以將其刪除。但是不能將表中一切列刪除。刪除列

37、的方法有兩種,一種是直接刪除,另一種是將列先標志為UNUSED,然后進展刪除。1直接刪除列2將列標志為UNUSED形狀直接刪除列可以運用ALTER TABLE DROP COLUMN語句直接刪除列??梢詣h除一列或多列,同時刪除與列相關的索引和約束。假設刪除的列是一個多列約束的組成部分,那么必需運用CASCADE CONSTRAINTS選項。例子:刪除employess表中的sno,phone,hiredate列,語句為:ALTER TABLE sc DROP COLUMN sno CASCADE CONSTRAINTS;ALTER TABLE employee DROP(phone,hired

38、ate);將列標志為UNUSED形狀刪除列時,將刪除表中每個記錄的相應列值,同時釋放存儲空間。因此,假設要刪除一個大的表中的列,由于需求對每個記錄進展處置,并寫入重做日志文件,需求很長的處置時間。為了防止在數(shù)據(jù)庫運用頂峰期間由于刪除列的操作而占用過多的資源,可以暫時將列置為UNUSED形狀。將列標志為UNUSED形狀運用 ALTER TABLE SET UNUSED語句。對用戶來說,被標志為UNUSED形狀的列像被刪除了一樣,無法查詢該列,但實踐上該列依然存在,并占用存儲空間??梢栽跀?shù)據(jù)庫空閑時,運用ALTER TABLE DROP UNUSED COLUMNS語句刪除處于UNUSED形狀的一

39、切列。將列標志為UNUSED形狀例子:將employee表中sage、sname、resume列設置為UNUSED形狀ALTER TABLE player SET UNUSED COLUMN sage;ALTER TABLE player SET UNUSED COLUMN (sname,resume);ALTER TABLE player DROP UNUSED COLUMNS;6.5 刪除和截斷表drop table tablename;truncate table tablename;delete table tablename;1 刪除表刪除表drop table tablename;

40、特性:它刪除表中一切的數(shù)據(jù)行和表的構(gòu)造。它也刪除表的一切索引。假設沒有備份,所刪除的數(shù)據(jù)無法恢復。它提交一切的掛起的事務。一切基于該表的視圖和別名依然保管但已無效。2 截斷表截斷表truncate table tablename;特性:它刪除表中一切的數(shù)據(jù)行,但保管表的構(gòu)造。假設沒有備份,所刪除的數(shù)據(jù)無法恢復。該語句釋放表所占用的磁盤空間。它并不觸發(fā)表的刪除觸發(fā)器。3 刪除表內(nèi)容delete table tablename;delete語句是dml,這個操作會放到rollback segement中,事務提交之后才生效;假設有相應的trigger,執(zhí)行的時候?qū)⒈挥|發(fā).小結(jié)1 truncate和

41、 delete只刪除數(shù)據(jù)不刪除表的構(gòu)造(定義)drop語句將刪除表的構(gòu)造被依賴的約束(constrain),觸發(fā)器(trigger),索引(index).2 delete語句是dml,這個操作會放到rollback segement中,事務提交之后才生效;假設有相應的trigger,執(zhí)行的時候?qū)⒈挥|發(fā).truncate,drop是ddl, 操作立刻生效,原數(shù)據(jù)不放到rollback segment中,不能回滾. 操作不觸發(fā)trigger.3 速度,普通來說: drop; truncate ; delete4 平安性:小心運用drop 和truncate,尤其沒有備份的時候.否那么哭都來不及5

42、運用上,想刪除部分數(shù)據(jù)行用delete,留意帶上where子句. 回滾段要足夠大. 6.6 分區(qū)表當表中的數(shù)據(jù)量不斷增大,查詢數(shù)據(jù)的速度就會變慢,運用程序的性能就會下降,這時就應該思索對表進展分區(qū)。表進展分區(qū)后,邏輯上表依然是一張完好的表,只是將表中的數(shù)據(jù)在物理上存放到多個表空間(物理文件上),這樣查詢數(shù)據(jù)時,不至于每次都掃描整張表。表分區(qū)的詳細作用:Oracle的分區(qū)表功能經(jīng)過改善可管理性、性能和可用性,從而為各式運用程序帶來了極大的益處。通常,分區(qū)可以使某些查詢以及維護操作的性能大大提高。此外,分區(qū)還可以極大簡化常見的管理義務,分區(qū)是構(gòu)建千兆字節(jié)數(shù)據(jù)系統(tǒng)或超高可用性系統(tǒng)的關鍵工具。1 范圍

43、分區(qū)范圍分區(qū)將數(shù)據(jù)基于范圍映射到每一個分區(qū),這個范圍是他在創(chuàng)建分區(qū)時指定的分區(qū)鍵決議的。這種分區(qū)方式是最為常用的,并且分區(qū)鍵經(jīng)常采用日期。舉個例子:能夠會將銷售數(shù)據(jù)按照月份進展分區(qū)。當運用范圍分區(qū)時,請思索以下幾個規(guī)那么:1、每一個分區(qū)都必需有一個VALUES LESS THEN子句,它指定了一個不包括在該分區(qū)中的上限值。分區(qū)鍵的任何值等于或者大于這個上限值的記錄都會被參與到下一個高一些的分區(qū)中。2、一切分區(qū),除了第一個,都會有一個隱式的下限值,這個值就是此分區(qū)的前一個分區(qū)的上限值。3、在最高的分區(qū)中,MAXVALUE被定義。MAXVALUE代表了一個不確定的值。這個值高于其它分區(qū)中的任何分區(qū)

44、鍵的值,也可以了解為高于任何分區(qū)中指定的VALUE LESS THEN的值,同時包括空值例1 按id值SQL create table fnn_test1 2 ( 3 KPI_ID VARCHAR2(10), 4 KPI_NAME VARCHAR2(60), 5 FA_BIL_CODE VARCHAR2(10), 9 PAYOUT_RATE NUMBER(10,2), 10 ACCT_YEAR VARCHAR2(4) 11 ) 12 partition by range (KPI_ID) 13 ( 14 partition PART1 values less than (10000), 15

45、partition PART2 values less than (20000), 16 partition PART3 values less than (30000), 17 partition PART4 values less than (40000) 18 );例2 按時間SQL create table fnn_test2 2 ( 3 KPI_CODE VARCHAR2(10), 4 KPI_NAME VARCHAR2(60), 5 FA_BIL_CODE VARCHAR2(10), 9 PAYOUT_RATE NUMBER(10,2), 10 ACCT_YEAR VARCHAR2(4) 11 ) 12 partition by range (ACCT_YEAR) 13 ( 14 partition PART_2021 values less than (2021), 15 partition PART_2021 values

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論