Oracle基礎筆記八

第八章 數據處理


1.數據操縱語言

DML(Data Manipulation Language – 數據操縱語言) 可以在下列條件下執行:

向表中插入數據

修改現存數據

刪除現存數據

事務是由完成若干項工作的DML語句組成的


2.INSERT 語句語法

使用 INSERT 語句向表中插入數據。

使用這種語法一次只能向表中插入一條數據。

INSERT INTO table [(column [, column...])]

VALUES (value [, value...]);


2.1插入數據

爲每一列添加一個新值。

按列的默認順序列出各個列的值。 

在 INSERT 子句中隨意列出列名和他們的值。

字符和日期型數據應包含在單引號中。

例如:

INSERT INTO departments(department_id, department_name, 

                        manager_id, location_id)

VALUES      (70, 'Public Relations', 100, 1700);


INSERT INTO employees(employee_id,last_name,email,hire_date,job_id)

VALUES  (300,’Tom’,’[email protected]’,to_date(‘2012-3-21’,’yyyy-mm-dd’),’SA_RAP’);

1 row created.


2.2向表中插入空值

隱式方式: 在列名錶中省略該列的值。

INSERT INTO departments (department_id, 

                        department_name    )

VALUES (30, 'Purchasing');


顯示方式: 在VALUES 子句中指定空值。

INSERT INTO departments

VALUES (100, 'Finance', NULL, NULL);


2.3插入指定的值

INSERT INTO employees (employee_id, 

                 first_name, last_name, 

                 email, phone_number,

                 hire_date, job_id, salary, 

                 commission_pct, manager_id,

                 department_id)

VALUES   (113, 

                 'Louis', 'Popp', 

                 'LPOPP', '515.124.4567', 

                 SYSDATE, 'AC_ACCOUNT', 6900, 

                 NULL, 205, 100);


2.4從其它表中拷貝數據,在 INSERT 語句中加入子查詢。 

INSERT INTO emp2 

SELECT * 

FROM employees

WHERE department_id = 90;


INSERT INTO sales_reps(id, name, salary, commission_pct)

SELECT employee_id, last_name, salary, commission_pct

FROM   employees

WHERE  job_id LIKE '%REP%';

不必書寫 VALUES 子句。 

子查詢中的值列表應與 INSERT 子句中的列名對應


3.使用 UPDATE 語句更新數據。

UPDATE table

SET column = value [, column = value, ...]

[WHERE condition];


3.1使用 WHERE 子句指定需要更新的數據。

UPDATE employees

SET    department_id = 70

WHERE  employee_id = 113;


如果省略 WHERE 子句,則表中的所有數據都將被更新

UPDATE copy_emp

SET     department_id = 110;

22 rows updated.


3.2在 UPDATE 語句中使用子查詢

題目:更新 114號員工的工作和工資使其與205號員工相同。

UPDATE   employees

SET      job_id  = (SELECT  job_id 

                    FROM    employees 

                    WHERE   employee_id = 205), 

         salary  = (SELECT  salary 

                    FROM    employees 

                    WHERE   employee_id = 205) 

WHERE    employee_id    =  114;


題目:調整與employee_id 爲200的員工job_id相同的員工的department_id爲employee_id爲100的員工的department_id。

UPDATE  copy_emp

SET     department_id  =  (SELECT department_id

                           FROM employees

                           WHERE employee_id = 100)

WHERE   job_id         =  (SELECT job_id

                           FROM employees

                           WHERE employee_id = 200);


注意更新中的數據完整性錯誤


4.DELETE 語句,使用 DELETE 語句從表中刪除數據。

DELETE FROM  table

[WHERE  condition];


使用 WHERE 子句刪除指定的記錄。

 DELETE FROM departments

 WHERE  department_name = 'Finance';


如果省略 WHERE 子句,則表中的全部數據將被刪除

DELETE FROM  copy_emp;

22 rows deleted.


4.2在 DELETE 中使用子查詢,使刪除基於另一個表中的數據。

題目:從emp1表中刪除dept1部門名稱中含Public字符的部門id

DELETE FROM emp1

WHERE  department_id =

                       (SELECT department_id

                        FROM   dept1

                        WHERE  department_name LIKE '%Public%');


5.數據庫事務

事務:一組邏輯操作單元,使數據從一種狀態變換到另一種狀態。

數據庫事務由以下的部分組成:

一個或多個DML 語句

一個 DDL(Data Definition Language – 數據定義語言) 語句

一個 DCL(Data Control Language – 數據控制語言) 語句


以第一個 DML 語句的執行作爲開始

以下面的其中之一作爲結束:

COMMIT 或 ROLLBACK 語句

DDL 語句(自動提交)

用戶會話正常結束

系統異常終止


COMMIT和ROLLBACK語句的優點:

使用COMMIT 和 ROLLBACK語句,我們可以: 

確保數據完整性。

數據改變被提交之前預覽。

將邏輯上相關的操作分組。


回滾到保留點:

使用 SAVEPOINT 語句在當前事務中創建保存點。

使用 ROLLBACK TO SAVEPOINT 語句回滾到創建的保存點。

UPDATE...

SAVEPOINT update_done;

Savepoint created.

INSERT...

ROLLBACK TO update_done;

Rollback complete.



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章