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