①數據操縱語言
DML(Data Manipulation Language – 數據操縱語言) 可以在下列條件下執行:
向表中插入數據
修改現存數據
刪除現存數據
查詢現存數據
事務是由完成若干項工作的DML語句組成的
②INSERT 語句語法
1.使用 INSERT 語句向表中插入數據。
INSERT INTO table [(column [, column...])]
VALUES (value [, value...]);
使用這種語法一次只能向表中插入一條數據。
2.從其它表中拷貝數據
在 INSERT 語句中加入子查詢。
INSERT INTO table1 [(column [, column...])]
select [(column [, column...])]
from table2
where condition
不必書寫 VALUES 子句。
子查詢中的值列表應與 INSERT 子句中的列名對應
3.創建腳本
在SQL 語句中使用 & 變量指定列值。
& 變量放在VALUES子句中。
③UPDATE 語句語法
1.使用 UPDATE 語句更新數據。
UPDATE table
SET column = value [, column = value, ...]
[WHERE condition];
可以一次更新多條數據。
使用 WHERE 子句指定需要更新的數據
如果省略 WHERE 子句,則表中的所有數據都將被更新
2.在 UPDATE 語句中使用子查詢
在 UPDATE 中使用子查詢,使更新基於另一個表中的數據。
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);
3.更新中的數據完整性錯誤
UPDATE employees
SET department_id = 55
WHERE department_id = 110;
department_id是引用外鍵,但是55不存在於引用表中,違反外鍵約束
④DELETE 語句
1.使用 DELETE 語句從表中刪除數據。
DELETE FROM table
[WHERE condition];
使用 WHERE 子句刪除指定的記錄。
如果省略 WHERE 子句,則表中的全部數據將被刪除
2.在 DELETE 中使用子查詢
DELETE FROM emp1
WHERE department_id =
(SELECT department_id
FROM dept1
WHERE department_name LIKE '%Public%');
3.刪除中的數據完整性錯誤
DELETE FROM departments
WHERE department_id = 60;
注:department_id = 60 已經被引用,故不能刪除
⑤數據庫事務
事務:一組邏輯操作單元,使數據從一種狀態變換到另一種狀態。
1.數據庫事務由以下的部分組成:
一個或多個DML 語句
一個 DDL(Data Definition Language – 數據定義語言) 語句
一個 DCL(Data Control Language – 數據控制語言) 語句
2.開始與結束
以第一個 DML 語句的執行作為開始
以下面的其中之一作為結束:
COMMIT 或 ROLLBACK 語句
DDL 語句(自動提交)
用戶會話正常結束
系統異常終止
3.COMMIT和ROLLBACK語句的優點
使用COMMIT 和 ROLLBACK語句,我們可以:
確保數據完整性。
數據改變被提交之前預覽。
將邏輯上相關的操作分組。
4.回滾到保留點
使用 SAVEPOINT 語句在當前事務中創建保存點。
使用 ROLLBACK TO SAVEPOINT 語句回滾到創建的保存點。
5.事務進程
自動提交在以下情況中執行:
DDL 語句。
DCL 語句。
不使用 COMMIT 或 ROLLBACK 語句提交或回滾,正常結束會話。
會話異常結束或系統異常會導致自動回滾。
6.提交或回滾前的數據狀態
改變前的數據狀態是可以恢復的
執行 DML 操作的用戶可以通過 SELECT 語句查詢之前的修正
其他用戶不能看到當前用戶所做的改變,直到當前用戶結束事務。
DML語句所涉及到的行被鎖定, 其他用戶不能操作。
7.提交後的數據狀態
數據的改變已經被保存到數據庫中。
改變前的數據已經丟失。
所有用戶可以看到結果。
鎖被釋放,其他用戶可以操作涉及到的數據。
所有保存點被釋放。