- Oracle從新手到高手
- 楊繼萍
- 1720字
- 2019-12-09 14:49:04
4.4 操作數據
SQL語句除了可以查詢數據外,還可以完成插入、更新和刪除數據等操作。在Oracle中創建表后,只有在表中插入數據之后,該表才有意義。如果表中的數據不合適,還可以對那些不合適的數據進行更新。如果某些數據已經不再需要,則可以刪除這些數據。在操作數據的過程中,Oracle是通過各種事務來進行管理的。
4.4.1 插入數據
插入數據就是將數據放置到已經創建的表中,Oracle數據庫通過INSERT語句來實現插入數據。一般情況下,使用INSERT語句可以一次插入一行數據。
與SELECT語句相比,INSERT語句的使用方式要簡單得多。在INSERT語句的使用方式中,最為常用的形式是在INSERT INTO子句中指定添加數據的列,并在VALUES子句中為各個列提供一個值。
下面的語句將向SCOTT模式中的EMP表添加一條記錄。

在向表中所有列添加數據時,可以省略INSERT INTO子句后的列表清單。使用這種方法時,必須根據表中定義的列的順序,為所有的列提供數據,用戶可以使用DESC命令查看表中定義列的順序。下面的INSERT語句在向EMP表添加記錄時省略了列清單。

在插入操作過程中,用戶也可以根據實際情況只為部分列提供數據,而省略某些列的數據。注意這些列必須允許空值、有默認值或系統可以自動生成值等。例如,在EMP表中,除EMPNO列不允許空值外,其他列都可以為空值。
如果某個列不允許NULL值存在,而用戶沒有為該列提供數據,則會因為違反相應的約束而插入失敗。事實上,在定義表的時候為了數據的完整性,經常會為表添加許多約束。例如,在EMP表中為了保證表中每條記錄的唯一性,在表的EMPNO列上定義了主鍵約束。如果用戶試圖為表中的EMPNO列添加一個重復值,則會因為違反主鍵約束而失敗。
SQL> insert into emp(empno,ename,job) 2 values(7782,'KING','CLERK'); insert into emp(empno,ename,job) * 第1行出現錯誤: ORA-00001: 違反唯一約束條件 (SCOTT.PK_EMP)
關于為表定義完整性約束,將在后面的章節中介紹,這里需要記住的是在向表添加記錄時,添加的數據必須符合為表定義的所有完整性約束。
INSERT語句還有一種用法,可以實現一次向表中添加一組數據。即使用SELECT語句替換VALUES子句,這樣由SELECT語句提供添加的數值。例如,下面的示例從EMP表提取屬于某一部門的雇員信息并保存到另外一個表中。
SQL> create table accounting_employees( 2 empno number(4), 3 ename varchar2(10), 4 job varchar2(20), 5 hiredate date, 6 sal number(6,2)); 表已創建。 SQL> insert into accounting_employees 2 select empno,ename,job,hiredate,sal 3 from emp 4 where deptno=10; 已創建5行。
從上面的語句執行結果可以看出,通過使用INSERT和SELECT語句的組合,一次性為新創建的表添加了5行數據。
提示:
在使用INSERT和SELECT語句的組合成批添加數據時,INSERT INTO子句后所指定的列名可以與SELECT子句指定的列名不同,但是其數據類型必須相匹配,即SELECT語句返回的數據必須滿足表中的約束。
4.4.2 更新數據
如果表中的數據不合適,則需要對其修改或更新。在SQL中,用戶可以使用UPDATE語句完成數據的更新操作。
在更新數據時,既可以一次更新一列,也可以一次更新多列。如果在UPDATE語句中使用了WHERE條件表達式,那么只有符合條件的記錄才會被更新;如果沒有使用WHERE條件表達式,那么更新表中所有行的數據。
在更新表中的數據時,這些更新操作不能違反表中的完整性約束。例如,在EMP表中,主鍵列EMPNO的數據不允許重復,因此如果更新后的數據與現存數據相同,則會因為違反主鍵約束而失敗。如下所示。
SQL> update emp 2 set empno=7876 3 where ename='CLARK'; update emp * 第1行出現錯誤: ORA-00001: 違反唯一約束條件 (SCOTT.PK_EMP)
提示:
在更新數據時,如果沒有使用WHERE條件表達式,那么系統將會更新表中所有的數據。因此,在使用沒有條件表達式的更新操作時一定要謹慎。
4.4.3 刪除數據
如果表中的數據不再需要,那么就可以刪除表中的數據。在刪除表中的數據時,最常用的SQL語句是DELETE語句。
在刪除操作中,既可以一次刪除一行數據,也可以一次刪除多行數據,更可以刪除表中的所有數據。在DELETE語句中,如果沒有使用WHERE條件表達式,那么將會刪除表中的所有數據。例如,下面語句將刪除EMP表中的ENAME列為ATG的記錄行。
SQL> delete from emp 2 where ename='ATG'; 已刪除1行。
在Oracle系統中,除了DELETE語句外,還可以使用TRUNCATE TABLE語句刪除表中的所有數據。相比之下,使用TRUNCATE語句刪除數據時,通常要比DELETE語句快得多。這是因為使用TRUNCATE TABLE語句刪除數據時,它不會產生回退信息,因此執行TRUNCATE操作也不能撤銷。例如,下面的語句將刪除ACCOUNTING_EMPLOYEES表中所有的記錄。
SQL> truncate table accounting_employees; 表被截斷。
在用TRUNCATE語句刪除數據時,還可以使用關鍵字REUSE STORAGE,表示刪除記錄后仍然保存記錄占用的空間;與此相反,也可以使用DROP STORACE關鍵字,表示刪除記錄后立即回收記錄占用的空間,默認在TRUNCATE TABLE語句中使用DROP STORAGE關鍵字。使用關鍵字REUSE STORAGE保留刪除記錄后的空間的TRUNCATE語句如下。
SQL> truncate table accounting_employees reuse storage; 表被截斷。
- Hands-On Machine Learning with scikit:learn and Scientific Python Toolkits
- The Android Game Developer's Handbook
- Java EE框架整合開發入門到實戰:Spring+Spring MVC+MyBatis(微課版)
- Python從入門到精通(精粹版)
- FFmpeg入門詳解:音視頻原理及應用
- Linux操作系統基礎案例教程
- KnockoutJS Starter
- HTML5入門經典
- Learning Hunk
- 組態軟件技術與應用
- Android系統原理及開發要點詳解
- Create React App 2 Quick Start Guide
- Processing創意編程指南
- Learning Material Design
- C++從入門到精通(第6版)