SG_007_CHAPTER 7

chenai79921發表於2009-10-21

Managing Tables and Constraints

Built-in Datatypes

ROWID:儲存資料行的實體地址 資料的型別。

Creating Tables

Name tables and column

表名中可以包含 ‘$’ ‘_’ ‘#’

Creating a Temporary Table:

建表預設是permanent

如果建表時候,包含關鍵字GLOBAL TEMPORARY,那麼就建立一個臨時的關係表,任何資料庫的使用者都能對錶的定義進行查詢,資料只對插入資料的使用者有效。

ON COMMIT DELETE ROWS(預設的) 會話的

ON COMMIT PRESERVE ROWS 事務的

Specifying Default Values for Columns

例子(1):

Create table table1(

Column_1 number

Column_2 varchar2(10) default ‘TEST’)

Test為預設值。

例子(2):

Create table table1(

Column_1 number

Column_2 TIMESTAMP WITH LOCAL TIME ZONE default systimestamp

Column_2 varchar2(10) default user)

插入資料時候,若有defaultcolumn接收default,若沒有defaultcolumn接收default時候為null

Creating a Table from Another Table

Create table

AS SELECT ~~~~~~~CTAS

例子:複製表的結構和資料

Create table xxx

As select * from table2

例子:

只複製表結構

Create table xxx as select * from table2 where 1=2

Not null的約束可以複製到新表,其他約束和column定義不被複製。

Adding Columns

Alter table [.] add ;

當加入一個新的column,自動成為表的最右的column

如果所加的column是已經存在的話,那麼新的column的值成為null

例子:

Alter table orders ADD(quantity NUMBER (13,3),

Update_dt DATE DEFAULT SYSDATE);

加兩個column,其中一個定義預設值。

如果只加一個column的話,那麼不用加括號()。

新增一個not null column,有如下步驟:

1.add column

2.update column for existing values

3.add a not null constraints

對一個有default column的表來說,可以add not null constraints

Modifying Columns:

Alter table [.] MODIFY

如果忽略column的某些定義(資料型別,預設數值,column約束),忽略的部分儲存不變。

例子:

Alter table orders modify (quantity NUMBER (10,3),

Status VARCHAR2(15));

Modify Default屬性,隻影響新加入表的資料,已經存在的資料null值的不受影響。

columndefault屬性去除,重新用null來定義default。??359??

Dropping Columns

Alter table[.] DROP {COLUMN | ()}

[CASCADE CONSTRAINTS]

Drop column 的時候該column的目錄和約束也一起被drop

如果該column的約束是多個column的約束,那麼必須加上CASCADE CONSTRAINTS引數,此時這個多column的約束會被刪除。

使某個column失效:

Alter table schme.table_name

Set unused {column } [cascade constraints]

Alter table schema.table_name DROP { UNUSED COLUMNS | COLUMNS CONTINUE }

UNUSED COLUMNS:刪除所有打上unused標記的column項。

COLUMNS CONTINUE:刪除出錯的時,從出錯處,繼續刪除。

Dropping Tables

Drop操作不可逆,並且資料和表結構都被刪除了。目錄,約束,觸發器,依靠在表上的,都被丟棄。

Drop table [schme.]table_name [cascade constraints]

cascade constraints引數:當有檢視引用表的時候,當drop表的時候,要使用這個引數。

Renaming Tables

Rename old_name TO new_name.

當你重新命名一個表,oracle 自動把老表的約束,目錄,授權給新表。 所有依賴老表的檢視,同義詞,儲存過程,function功能都失效。

不可以使用rename命令來重新命名其他使用者擁有的表,但是可以使用

ALTER TABLE xxx rename to yyyy

Managing Constraints

Not null:不允許為空。

Check:檢查條件是否滿足。

Uniquecolumn中沒有重複值 。

Primary key:一個表中只允許有一個主鍵,沒有重複值,沒有空值。

Foreign key:父表子表透過一個共同的column來建立聯絡。外來鍵引用另外一個表的主鍵或者unique鍵。

Creating Constraints

可以在column level上在單個column上定義約束。

可以再table level 上多個column上定義約束。

如果不為約束定義一個名字,oracle會自動分配一個系統產生的以SYS開頭的約束名。

Not null constraints

定義在Column level

Constraint [not] Null

例子:

Create table orders(

Column_name datatype CONSTRAINT constraint_name NOT NULL)

Check Constraints:

Column level 或者table level

[constraint ] CHECK ()

condition中不能使用query

不能使用alter table modify 語句新增或者修改check constraints。只有not null可以被修改。

Unique Constraints

一個或者多個column可以使用unique 約束。

Column-level

[constraint ] UNIQUE

Table-level:

[constraint ] UNIQUE(,,…)

允許null

Primary Key Constraints

[CONSTRAINT ] PRIMARY KEY

[CONSTRAINT ] PRIMARY KEY,,…

為存在的表,新增一個主鍵。

例子:

Alter table xxx

Add constraints pk_xxx PRIMARY KEY(column1,column2)

Foreign Key Constraints:

子表中的項,引用的column是主鍵 key或者unique key,主表與子表的column資料型別必須匹配。

Column-level:

Constraint

REFERENCES schema.table [,,…]

[on delete {CASCADE | SET NULL}]

Table-level:

[constraint ]

Foreign key (,,…)

References schme.table [,,…]

[on delete {cascade | set null}]

外來鍵引用的鍵值,可以是自己表中的columnNull可以成為外來鍵column

當子表引用父表的column是該父表的主鍵的話,那麼

reference table_name (可以省略column)

on delete cascade : 刪除父表記錄的時候,子表中引用的記錄也被刪除。

on delete set null:把子表資料設定為null

否則oracle不允許刪除父表,如果子表記錄還存在的話。

檢視中可以檢視約束資訊:

User_constraints , all_constraints , User_columns , User_columns

Disabled constraints:

Alter table table_name add constraint constraint_name

Foreigen key(column1,column2)

References state(column1,column2) DISABLE

Dropping Constraints:

Alter table table_name DROP CONSTRAINT constraint_name;

丟棄not null 約束,使用:

Alter table table_name MODIFY constratint_name NULL;

丟棄unique約束,同時外來鍵約束也丟棄。

Alter table table_name DROP UNIQUE (column) CASCADE

丟棄主鍵約束,同時外來鍵約束也丟棄。

Alter table table_name DROP PRIMARY KEY CASCADE

Enabling and Disabling Constraints:

Disable uniqueprimary約束的時候,oracleindex也丟棄了,當重新enable約束時,index rebuild

例子:(diable constratint)

Alter table bonus DISABLE CONSTRAINT ck_bonus;

例子:(enable constraint

Alter table state ENABLE PRIMARY KEY USING INDEX TABLESPACE user_INDEX STORAGE(INITIAL 2M NEXT 2M)

Validated Constraints:

Enable disable隻影響將要新增或者修改到表中的資料。

相反VALIDATE NOVALIDATE影響,已經存在表中的資料。

ENABLE VALIDATE : 對存在的資料進行驗證。

Enable NOVALIDATE: 對存在的資料不作驗證,將要輸入的資料進行驗證。

DISABLE VALIDATE : 約束disable了,但是約束屬於valid狀態。不允許DML操作,因為將來的資料不能被verify

Disable novalidate : disble 的預設語句。

Deferring Constraint Checks

INITIALLY IMMEDIATE: 在每個SQL語句之後,立刻check約束。(預設的)

INITIALLY DEFERRED: 在事務之後check 約束

Deferrable 的狀態不能使用alter table modify constraint來修改

必須重新dropre-create約束。

Initiall {deferrable | immediate}可以使用alter table來改變。

Set constraints 命令 用來對當前的事務執行check約束。

Alter session 命令對當前的sessioncheck 約束。

[@more@]

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/11997930/viewspace-1028022/,如需轉載,請註明出處,否則將追究法律責任。

上一篇: SG_007_CHAPTER 6
下一篇: SG_007_CHAPTER 8
SG_007_CHAPTER 7
請登入後發表評論 登入
全部評論