1. 程式人生 > >資料庫對錶的操作(常用)

資料庫對錶的操作(常用)

1.建立表

1) 直接建表:CREATE TABLE [schema.] 表名 (  id int PRIMARY KEY,..... );   schema 為方案,預設為使用者名稱

2) 子查詢建表:CREATE TABLE table [(col1,col2...)]   
                           AS SELECT * FROM emp;

新建表後面的欄位列表,如果有的話欄位的數目

必須等於子查詢所選的欄位數目,如果沒有則新建表的欄位名使用子查詢的欄位名  通過子查詢建立表完整性約束不會傳遞到新表 但是欄位的資料型別會被引用

欄位的約束:

1)約束分類:非空約束 預設值約束 主鍵約束 (不可以為空) 唯一約束 (可以為空) 外來鍵約束  check 約束 等

2)新增約束:約束可以在建立表的時候定義 ,也可以是在建立表之後定義(ALTER) 

 語法:ALTER TABLE 表名  ADD[CONSTRAINT  約束名]  type(column)     ----------------建議命名約束

 例如新增check約束:

ALTER TABLE 表名 ADD CONSTRAINT emp_salary_min CHECK(salary >0);

3)外來鍵約束實現:( 外來鍵的值必須匹配一個在父表中存在的值,同時在父表中不能刪除這樣的行,該行的主鍵正在被子表所引用

一對多關係: 一個表存放另一個表的主鍵

一對一關係: 在外來鍵表對存放的主鍵加一個唯一約束

多對多關係: 通過建立一個第三個表存放兩個表的主鍵

4)刪除約束

ALTER TABLE 表名 DROP PRIMARY KEY | UNIQUE(column)

CONSTRAINT cname   [CASCADE]
           --CASCADE表示與其依賴的約束也被刪除

5)啟用禁用約束

啟用:ALTER TABLE 表名 DISABLE CONSTRAINT cname[CASCADE]
           禁用:ALTER TABLE 表名 ENABLE CONSTRAINT cname
  

2.修改表

修改表名     RENAME old_name TO new _name

1)新增欄位

ALTER TABEL tabel ADD (列名 型別 預設值)

--新增欄位age 預設1
ALTER TABLE t_emp  ADD(age  NUMBER DEFAULT 1);

2)修改欄位

修改欄位名字  ALTER TABLE 表名 RENAME COLUMN 原名 TO 新名

修改欄位型別  ALTER TABEL 表名 MODIFY(列名 varchar(20))

--修改欄位名 age 改為 newAge
ALTER TABLE t_emp RENAME COLUMN age TO newage;

--修改欄位 age型別 為varchar
ALTER TABLE t_emp  MODIFY(age varchar2(100));

3)刪除欄位

ALTER TABLE 表名 DROP(列名)

--刪除age這一列
ALTER TABLE t_emp DROP (age);

3.刪除表

刪除表:DROP TABLE 表名

DELETE(不帶WHERE)  DROP TRUNCATE 的區別:

相同點:  truncate和不帶where子句的delete, 以及drop都會刪除表內的資料

不同點:

  1. drop語句將刪除表的結構被依賴的約束、觸發器、索引;依賴於該表的儲存過程/函式將保留,但是變為invalid狀態.  
                truncate和delete只刪除資料不刪除表的結構(定義)  
  2. truncate,drop是ddl,操作立即生效不能回滾,delete是dml,可以回滾,因此小心使用drop 和 truncate
  3. delete可以返回被刪除的記錄數,可以和WHERE一起使用,而TRUNCATE TABLE返回的是0。
  4. 速度,一般來說:   drop>   truncate   >   delete      

4.恢復表

-----------從flash back裡查詢被刪除的表

SELECT * FROM RECYCLEBIN;

-------執行表的恢復,同時恢復資料

FLASHBACK TABLE t_emp TO BEFORE DROP;