對數據庫的操作除了查詢,還包括插入、更新和刪除等數據操作。后3種數據操作使用的 SQL 語言也稱為數據操縱語言(DML)。
一、插入數據(insert 語句)
插入數據就是將數據記錄添加到已經存在的數據表中,可以通過 insert 語句實現向數據表中一次插入一條記錄,也可以使用 select 子句將查詢結果批量插入數據表。
1、單條插入數據
語法:
insert into table_name [ (column_name[,column_name2]...) ] values(express1[,express2]... )
- table_name:要插入數據的表名
- column_name1 和 column_name2:指定表的完全或部分列名稱
- express1 和 express2 :表示要插入的值列表
EG:
SQL > insert into dept(deptno,dname,loc) values(88,'Tony','tianjin')
注意:
- insert into 中指定添加數據的列,可以是數據表的全部列,也可以是部分列
- 給指定列添加數據時,需要注意哪些列不能空;對於可以為空的列,添加數據可以不指定值;添加數據時,還應該數據添加數據和字段的類型和范圍
- 向表中所有列添加數據時,可以省略 insert into 子句后面的列表清單,使用這種方法時,必須根據表中定義列的順序為所有的列提供數據
- 添加數據時,還應該注意哪個字段是主鍵(主鍵的字段是不允許重復的),不能給主鍵字段添加重復的值
2、批量插入數據
insert 語句還可以一次向表中添加一組數據,可以使用 select 語句替換原來的 values 子句,語法如下:
insert into table_name [ (column_name1[,column_name2...]...) ] selectSubquery
- table_name:要插入數據的表名
- column_name1 和 column_name2 :表示指定的列名
- selectSubquery:任何合法的 select 語句,其所選列的個數和類型要與語句中的 column 對應。
EG:
SQL > insert into jobs_temp select * from jobs where jobs.salary > 1000
注意:
- 使用這種語句實現批量插入數據時,insert into 子句指定的列名可以與 select 子句指定的列名不同,但是它們之間的數據類型必須是兼容的
二、更新數據(update 語句)
如果表中的數據不正確或不符合需求,那么就可以通過 update 語句實現修改現有的數據記錄。
更新數據時,更新的列數可以有自己指定,列與列之間用逗號分隔;更新的條數可以通過 where 子句來加以限制,使用 where 子句時,系統只更新符合 where 條件的記錄,語法如下:
update table_name set {column_nam1=express1 [,column_name2=express2...] | (column_name1 [,column_name2...]) = (selectSubquery)} [where condition]
- table_name:表示要修改的表名
- column_name1 和 column_name2 :表示指定要更新的列名
- selectSubquery: 任何合法的 select 語句,其所選列的個數和類型要與語句中 column 對應
- condition:篩選條件表達式,只有符合篩選條件的記錄才會被更新
EG1:
SQL > update emp set sal = sal*1.2 where job = "salesman"
表示把銷售員(salesman)的工資上調20%。
EG2:
SQL > update emp set sal = (select avg(sal) from emp where job = "manager") where sal < 2000
表示把emp表中工資小於2000的人員工資調整為管理者的平均工資的水平。
注意:
- 將 update 語句與 select 語句組合使用時,必須保證 select 語句返回單一的值,否則會出現錯誤提示,導致更新數據失敗。
三、刪除數據 (delete 語句和 truncate 語句)
Oracle 系統提供了從數據庫刪除記錄的功能,刪除記錄可以使用 delete 語句和 truncate 語句,區分如下:
1、delete 語句
delete 語句用來刪除數據庫中的所有記錄和指定方位的記錄,若要刪除指定范圍的記錄,需用 where 子句進行限制,語法如下:
delete from table_name [where condition]
- table_name:表示要刪除記錄的表名
- condition:篩選條件,可選項,只有符合篩選條件的記錄才會被刪除掉
EG:
SQL > delete from jobs where job_id = "pro"
注意:使用 delete 語句來刪除數據時, Oracle 系統會產生回滾記錄,所有這種操作可以使用 rollback 語句來進行撤銷
2、truncate 語句
刪除記錄也可以使用 truncate 語句,語法同 delete 語句,使用 truncate 語句刪除表中的所有記錄要比 delete 語句快得多,但是不會產生回滾記錄,執行了 truncate 語句的操作也就無法使用 rollback 語句撤銷。
注意:在 truncate 語句還可以使用 reuse storage 關鍵字或者 drop storage 關鍵字,前者表示刪除記錄后仍然保存記錄所占用的空間;后者表示刪除記錄后立即回收記錄所占用的空間。Oracle 系統默認情況下的 truncate 語句使用 drop storage 關鍵字。