oracle 創建表、修改表、添加約束

創建表

CREATE  [GLOBAL  TEMPORARY]  TABLE  table_name  (

column_name  TYPE  [CONSTRAINT constraint_def DEFAULT default_exp]

[,column_name  TYPE  [CONSTRAINT constraint_def DEFAULT default_exp] ...]

)

[ON COMMIT {DELETE | PRESERVE ROWS}

TABLESPACE table_space;

例:

CREATE GLOBAL TEMPORARY TABLE order_status_temp (

id INTEGER,

status VARCHAR2(10),

last_modified DATE DEFAULT SYSDATE

)

ON COMMIT PRESERVE ROWS

獲得有關表的信息

對錶執行DESCRIBE命令。

SELECT * FROM user_tables(all_tables)

獲得表中列的信息

SELECT * column_name,data_type,data_length,data_precision,data_scale FROM user_tab_columns(all_tab_columns)


修改表

添加列

ALTER TABLE order_status2

ADD modified_by INTEGER

例: ALTER TABLE order_status2

ADD  initially_created DATE DEFAULT SYSDATE NOT NULL

添加虛擬列  只引用表中已有的其他列

ALTER TABLE salary_grades

ADD (average_salary AS ((low_salary + high_salary) / 2));


修改列的長度(只有在表中還沒有任何行或所有列都爲空值時纔可以減小列的長度)

ALTER TABLE order_status

MODIFY status VARCHAR2(15)

修改數字列的精度(只有在表中還沒有任何行或列爲空值時纔可以降低數字列的精度)

ALTER TABLE order_status2

MODIFY id NUMBER(5);

修改列的數據類型(如果表中還沒有任何行或列爲空值,就可以將列修改爲任何一種數據類型。否則就只能將列的數據類型修改爲一種兼容的數據類型。)

ALTER TABLE order_status2

MODIFY status CHAR(15);

修改列的默認值(默認值只適用於新插入表中的行。)

ALTER TABLE  order_status2

MODIFY last_modifyd DEFAULT SYSDATE - 1;

刪除列

ALTER TABLE order_status2

DROP COLUMN initially_created;


添加約束

CHECK約束: 指定一列或一組列的值必須滿足某種條件。

ALTER TABLE order_status

ADD CONSTRAINT order_status2_status_ck

CHECK (status IN ('PLACED','PENDING','SHIPPED'))

要添加一個約束,表中現有的所有行都必須滿足這個約束條件。(有一個例外:在最初添加約束時可以禁用約束,並可以通過指定ENABLE NOVALIDATE選項來讓約束只適用於新添加的數據。)

NOT NULL 約束

ALTER TABLE  order_status2

MODIFY status CONSTRAINT order_status_nn NOT NULL;

FOREIGN KEY約束

ALTER TABLE order

ADD CONSTRAINT order_modified_by_fk

modified_by REFERENCES employees(employee_id) ON DELETE CASCADE

ON DELETE CASCADE 指定在父表中刪除一行記錄時,子表中匹配的所有行也都將被刪除。所以當employees表中刪除一行記錄時,order中所有匹配的行也都將被刪除。

ON DELETE SET NULL 指定在父表刪除一行記錄時,order表中所匹配的行也都將被刪除。

UNIQUE約束  任何現有的行或新行始終必須有一個唯一的status列值

ALTER TABLE order

ADD CONSTRAINT order_status_unique UNIQUE (status);

刪除約束

ALTER TABLE order

DROP CONSTRAINT order_stasus_unique

禁用約束

添加約束但是禁用這個約束。

ALTER TABLE order

ADD CONSTRAINT order_status_unique UNIQUE (status) DISABLE  

DISABLE CONSTRAINT子句禁用現有約束

ALTER TABLE order

DISABLE CONSTRAINT order_status_unique (末尾添加CASCADE可以禁用依賴於指定約束的任何約束。在禁用主鍵或作爲外鍵約束的一部分的唯一性約束,必須使用CASCADE.)

啓用約束

ALTER TABLE order 

ENABLE CONSTRAINT order_status_unique;

要啓用約束,表中的所有行必須都能滿足約束條件。

通過指定ENABLE NOVALIDATE 可以選擇只對新數據應用某個約束。約束默認是ENABLE VALIDATE,意味着現有的行必須經過約束檢查。

延遲約束deferred constraint

事務被提交時強制執行的約束。在最初添加約束時可以使用DEFERRABLE指定約束是延遲約束。

約束一旦添加後,就不能再修改爲DEFERRABLE,只能將其刪除,再重新創建這個約束。

ALTER TABLE order

ADD CONSTRAINT order_status_unique (status)

DEFERRABLE INITIALLY DEFERRED;

如果向order表中添加行,那麼只有在執行commit命令時,纔會對order_status_unique約束進行檢查。

INITIALLY DEFERRED的意思是只有在事務被提交時,纔會檢查這個約束。

INITIALLY IMMEDIATE的意思是每次向表中添加數據、修改表的數據或從表中刪除數據都要檢查這個約束(與約束默認行爲相同)。

獲得有關約束的信息

通過查詢user_constraints視圖可以獲得有關約束的信息。(all_constraints)

SELECT * FROM user_constraints WHERE table_name = 'table name'

獲得有關列的約束的信息

查詢user_cons_columns視圖(all_cons_columns)


重命名錶

RENAME order TO order_change;

如果已經在約束名中使用了表名,則應該修改約束名。

向表中添加註釋使用COMMENT語句可以爲表或列添加註釋

爲表添加註釋:

COMMENT ON TABLE order IS

'order stores the state of an order';

爲列添加註釋:

COMMENT ON COLUMN order.last_modified IS

’last_modified stores the date and time the order was modified last'

1.獲得表的註釋

通過user_tab_comments視圖可以獲得有關表的註釋。

SELECT * 

FROM user_tab_comments

WHERE table_name = 'ORDER_STATUS'

2.獲得列的註釋 user_col_comments


截斷表

TRUNCATE刪除表中所有的行,並重置表的存儲空間

TRUNCATE TABLE order

刪除表

DROP TABLE order



發佈了53 篇原創文章 · 獲贊 16 · 訪問量 12萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章