資料庫對錶的操作(常用)
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)
--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都會刪除表內的資料
不同點:
- drop語句將刪除表的結構被依賴的約束、觸發器、索引;依賴於該表的儲存過程/函式將保留,但是變為invalid狀態.
truncate和delete只刪除資料不刪除表的結構(定義) - truncate,drop是ddl,操作立即生效不能回滾,delete是dml,可以回滾,因此小心使用drop 和 truncate
- delete可以返回被刪除的記錄數,可以和WHERE一起使用,而TRUNCATE TABLE返回的是0。
- 速度,一般來說: drop> truncate > delete
4.恢復表
-----------從flash back裡查詢被刪除的表
SELECT * FROM RECYCLEBIN;
-------執行表的恢復,同時恢復資料
FLASHBACK TABLE t_emp TO BEFORE DROP;