《《處理數(shù)據(jù)》PPT課件.ppt》由會員分享,可在線閱讀,更多相關(guān)《《處理數(shù)據(jù)》PPT課件.ppt(35頁珍藏版)》請在裝配圖網(wǎng)上搜索。
1、處理數(shù)據(jù),目標(biāo),通過本章學(xué)習(xí),您將可以: 使用 DML 語句 向表中插入數(shù)據(jù) 更新表中數(shù)據(jù) 從表中刪除數(shù)據(jù) 控制事務(wù),數(shù)據(jù)操作語言,DML 可以在下列條件下執(zhí)行: 向表中插入數(shù)據(jù) 修改現(xiàn)存數(shù)據(jù) 刪除現(xiàn)存數(shù)據(jù) 事務(wù)是由完成若干項工作的DML語句組成的。,插入數(shù)據(jù),DEPARTMENTS,New row,INSERT 語句語法,使用 INSERT 語句向表中插入數(shù)據(jù)。 使用這種語法一次只能向表中插入一條數(shù)據(jù)。,INSERT INTOtable (column , column.) VALUES(value , value.);,INSERT INTO departments(department_
2、id, department_name, manager_id, location_id) VALUES (70, Public Relations, 100, 1700); 1 row created.,插入數(shù)據(jù),為每一列添加一個新值。 按列的默認(rèn)順序列出各個列的值。 在 INSERT 子句中隨意列出列名和他們的值。 字符和日期型數(shù)據(jù)應(yīng)包含在單引號中。,INSERT INTOdepartments VALUES(100, Finance, NULL, NULL); 1 row created.,INSERT INTOdepartments (department_id, department
3、_name ) VALUES(30, Purchasing); 1 row created.,向表中插入空值,隱式方式: 在列名表中省略該列的值。,顯示方式: 在VALUES 子句中指定空值。,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, SYSDAT
4、E, AC_ACCOUNT, 6900, NULL, 205, 100); 1 row created.,插入指定的值,SYSDATE 記錄當(dāng)前系統(tǒng)的日期和時間。,INSERT INTO employees VALUES (114, Den, Raphealy, DRAPHEAL, 515.127.4561, TO_DATE(FEB 3, 1999, MON DD, YYYY), AC_ACCOUNT, 11000, NULL, 100, 30); 1 row created.,插入指定的值,加入新員工 檢查插入的數(shù)據(jù),INSERT INTO departments (department_i
5、d, department_name, location_id) VALUES (,創(chuàng)建腳本,在SQL 語句中使用 4 rows created.,從其它表中拷貝數(shù)據(jù),更新數(shù)據(jù),EMPLOYEES,Update rows in the EMPLOYEES table.,UPDATE 語句語法,使用 UPDATE 語句更新數(shù)據(jù)。 可以一次更新多條數(shù)據(jù)。,UPDATEtable SETcolumn = value , column = value, . WHERE condition;,UPDATE employees SET department_id = 70 WHERE employee_i
6、d = 113; 1 row updated.,使用 WHERE 子句指定需要更新的數(shù)據(jù)。 如果省略WHERE子句,則表中的所有數(shù)據(jù)都將被更新。,更新數(shù)據(jù),UPDATE copy_emp SET department_id = 110; 22 rows updated.,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
7、_id = 114; 1 row updated.,在UPDATE語句中使用子查詢,更新 114號員工的工作和工資使其與 205號員工相同。,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); 1 row updated.,在UPDATE語句中使用子查詢,在 UPDATE 中使用子查詢,使更新基于另一個表中的數(shù)據(jù)
8、。,UPDATE employees * ERROR at line 1: ORA-02291: integrity constraint (HR.EMP_DEPT_FK) violated - parent key not found,UPDATE employees SET department_id = 55 WHERE department_id = 110;,更新中的數(shù)據(jù)完整性錯誤,Department number 55 does not exist,從表DEPARTMENTS 中刪除一條記錄。,刪除數(shù)據(jù),DEPARTMENTS,DELETE 語句,使用 DELETE 語句從表中刪
9、除數(shù)據(jù)。,DELETE FROM table WHERE condition;,使用WHERE 子句指定刪除的記錄。 如果省略WHERE子句,則表中的全部數(shù)據(jù)將被刪除。,刪除數(shù)據(jù),DELETE FROM departments WHERE department_name = Finance; 1 row deleted.,DELETE FROM copy_emp; 22 rows deleted.,DELETE FROM employees WHERE department_id = (SELECT department_id FROM departments WHERE department
10、_name LIKE %Public%); 1 row deleted.,在 DELETE 中使用子查詢,在 DELETE 中使用子查詢,使刪除基于另一個表中的數(shù)據(jù)。,刪除中的數(shù)據(jù)完整性錯誤,DELETE FROM departments WHERE department_id = 60;,DELETE FROM departments * ERROR at line 1: ORA-02292: integrity constraint (HR.EMP_DEPT_FK) violated - child record found,You cannot delete a row that con
11、tains a primary key that is used as a foreign key in another table.,數(shù)據(jù)庫事務(wù),數(shù)據(jù)庫事務(wù)由以下的部分組成: 一個或多個DML 語句 一個 DDL 語句 一個 DCL 語句,數(shù)據(jù)庫事務(wù),以第一個 DML 語句的執(zhí)行作為開始 以下面的其中之一作為結(jié)束: COMMIT 或 ROLLBACK 語句 DDL 或 DCL 語句(自動提交) 用戶會話正常結(jié)束 系統(tǒng)異常終止,COMMIT和ROLLBACK語句的優(yōu)點(diǎn),使用COMMIT 和 ROLLBACK語句,我們可以: 確保數(shù)據(jù)完整性。 數(shù)據(jù)改變被提交之前預(yù)覽。 將邏輯上相關(guān)的操作分組。,
12、UPDATE. SAVEPOINT update_done; Savepoint created. INSERT. ROLLBACK TO update_done; Rollback complete.,回滾到保留點(diǎn),使用 SAVEPOINT 語句在當(dāng)前事務(wù)中創(chuàng)建保存點(diǎn)。 使用 ROLLBACK TO SAVEPOINT 語句回滾到創(chuàng)建的保存點(diǎn)。,自動提交在以下情況中執(zhí)行: DDL 語句。 DCL 語句。 不使用 COMMIT 或 ROLLBACK 語句提交或回滾,正常結(jié)束會話。 會話異常結(jié)束或系統(tǒng)異常會導(dǎo)致自動回滾。,事務(wù)進(jìn)程,提交或回滾前的數(shù)據(jù)狀態(tài),改變前的數(shù)據(jù)狀態(tài)是可以恢復(fù)的 執(zhí)行 DM
13、L 操作的用戶可以通過 SELECT 語句查詢之前的修正 其他用戶不能看到當(dāng)前用戶所做的改變,直到當(dāng)前用戶結(jié)束事務(wù)。 DML語句所涉及到的行被鎖定, 其他用戶不能操作。,提交后的數(shù)據(jù)狀態(tài),數(shù)據(jù)的改變已經(jīng)被保存到數(shù)據(jù)庫中。 改變前的數(shù)據(jù)已經(jīng)丟失。 所有用戶可以看到結(jié)果。 鎖被釋放, 其他用戶可以操作涉及到的數(shù)據(jù)。 所有保存點(diǎn)被釋放。,COMMIT; Commit complete.,改變數(shù)據(jù) 提交改變,DELETE FROM employees WHERE employee_id = 99999; 1 row deleted. INSERT INTO departments VALUES (29
14、0, Corporate Tax, NULL, 1700); 1 row inserted.,提交數(shù)據(jù),數(shù)據(jù)回滾后的狀態(tài),使用 ROLLBACK 語句可使數(shù)據(jù)變化失效: 數(shù)據(jù)改變被取消。 修改前的數(shù)據(jù)狀態(tài)可以被恢復(fù)。 鎖被釋放。,DELETE FROM copy_emp; 22 rows deleted. ROLLBACK; Rollback complete.,讀一致性,讀一致性為數(shù)據(jù)提供一個一致的視圖。 一個用戶的對數(shù)據(jù)的改變在事務(wù)中之之前不會影響其他用戶的讀取。,SELECT *FROM userA.employees;,讀一致性,UPDATE employeesSET salary =
15、 7000 WHERE last_name = Goyal;,數(shù)據(jù)塊,回滾段,改變和未改變的數(shù)據(jù),改變之前的數(shù)據(jù),User A,User B,快照,輸出 時間 會話1 會話2,t1,t2,t3,t4,t5,SELECT salary FROM employees WHERE last_name=King;,24000,UPDATE employees SET salary=salary+10000 WHERE last_name=King;,24000,COMMIT;,34000,SELECT salary FROM employees WHERE last_name=King;,SELECT salary FROM employees WHERE last_name=King;,讀一致性舉例,總結(jié),功能 插入 修正 刪除 提交 保存點(diǎn) 回滾,語句 INSERT UPDATE DELETE COMMIT SAVEPOINT ROLLBACK,通過本章學(xué)習(xí), 您應(yīng)學(xué)會如何使用DML語句改變數(shù)據(jù)和事務(wù)控制,