Học Oracle cơ bản (Bài 09)
Đây là tập tài liệu hướng dẫn học Oracle từ mức cơ bản của công ty PyThis, tài liệu này khá hay. Bạn nào quan tâm hãy download về và học
Bạn đang xem trước 20 trang tài liệu Học Oracle cơ bản (Bài 09), để xem tài liệu hoàn chỉnh bạn click vào nút DOWNLOAD ở trên
LÖnh thao t¸c d÷ liÖu Néi dung M« t¶ c©u lÖnh DML ChÌn c¸c hµng vµo b¶ng CËp nhËt c¸c hµng trong b¶ng Xãa c¸c hµng trong b¶ng §iÒu khiÓn c¸c transaction Ng«n ng÷ thao t¸c d÷ liÖu (DML) Mét c©u lÖnh DML thùc thi khi: Thªm mét hµng vµo b¶ng Söa ch÷a c¸c hµng trong b¶ng Xãa hµng trong b¶ng Mét transaction bao gåm mét tËp c©u lÖnh DML t¹o thµnh mét ®¬n vÞ c«ng viÖc Logic. Thªm mét hµng vµo b¶ng DEPT DEPTNO DNAME LOC ------ ---------- -------- 10 ACCOUNTING NEW YORK 20 RESEARCH DALLAS 30 SALES CHICAGO 40 OPERATIONS BOSTON DEPT DEPTNO DNAME LOC ------ ---------- -------- 10 ACCOUNTING NEW YORK 20 RESEARCH DALLAS 30 SALES CHICAGO 40 OPERATIONS BOSTON C©u lÖnh INSERT Thªm mét hµng vµo trong b¶ng nhê c©u lÖnh INSERT ChØ mét hµng ®îc INSERT vµo b¶ng t¹i mét thêi ®IÓm INSERT INTO table [(column [, column...])] VALUES (value [, value...]); ChÌn mét hµng míi ChÌn mét hµng míi chøa gi¸ trÞ cho mçi cét trong b¶ng Danh s¸ch gi¸ trÞ theo trËt tù mÆc ®Þnh cña b¶ng Danh s¸ch c¸c cét lµ tïy chän C¸c d÷ liÖu kiÓu character vµ date cÇn ®Æt trong dÊu nh¸y ®¬n SQL> INSERT INTO dept (deptno, dname, loc) 2 VALUES (50, 'DEVELOPMENT', 'DETROIT'); 1 row created. ChÌn mét hµng víi gi¸ trÞ NULL Bá qua cét cã gi¸ trÞ null trong danh s¸ch cét SQL> INSERT INTO dept (deptno, dname ) 2 VALUES (60, 'MIS'); 1 row created. ChØ ®Þnh gi¸ trÞ null SQL> INSERT INTO dept 2 VALUES (70, 'FINANCE', NULL); 1 row created. ChÌn gi¸ trÞ ®Æc biÖt Hµm sysdate tr¶ vÒ ngµy vµ thêi gian hÖ thèng SQL> INSERT INTO emp (empno, ename, job, 2 mgr, hiredate, sal, comm, 3 deptno) 4 VALUES (7196, 'GREEN', 'SALESMAN', 5 7782, SYSDATE, 2000, NULL, 6 10); 1 row created. ChÌn gi¸ trÞ ngµy chØ ®Þnh Thªm mét nh©n viªn míi. SQL> INSERT INTO emp 2 VALUES (2296,'AROMANO','SALESMAN',7782, 3 TO_DATE('FEB 3, 97', 'MON DD, YY'), 4 1300, NULL, 10); 1 row created. KiÓm tra b¶n ghi. EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO ----- ------- -------- ---- --------- ---- ---- ------ 2296 AROMANO SALESMAN 7782 03-FEB-97 1300 10 ChÌn gi¸ trÞ nhê biÕn thay thÕ T¹o script t¬ng t¸c nhê tham sè thay thÕ SQL> INSERT INTO dept (deptno, dname, loc) 2 VALUES (&department_id, 3 '&department_name', '&location'); Enter value for department_id: 80 Enter value for department_name: EDUCATION Enter value for location: ATLANTA 1 row created. T¹o script víi lêi nh¾c cña ngêi dïng ACCEPT Lu gi¸ trÞ trong biÕn PROMPT hiÓn thÞ lêi nh¾c ngêi dïng. ACCEPT department_id PROMPT 'Please enter the - department number:' ACCEPT department_name PROMPT 'Please enter - the department name:' ACCEPT location PROMPT 'Please enter the - location:' INSERT INTO dept (deptno, dname, loc) VALUES (&department_id, '&department_name', '&location'); LÊy hµng tõ b¶ng kh¸c ViÕt c©u lÖnh INSERT b»ng c©u lÖnh subquery Kh«ng sö dông mÖnh ®Ò VALUES Sè cét trong mÖnh ®Ò SELECT ph¶i b»ng sè cét trong mªnh ®Ò insert SQL> INSERT INTO managers(id, name, salary, hiredate) 2 SELECT empno, ename, sal, hiredate 3 FROM emp 4 WHERE job = 'MANAGER'; 3 rows created. Thay ®æi d÷ liÖu trong b¶ng EMP EMP EMPNO ENAME JOB ... DEPTNO 7839 KING PRESIDENT 10 7698 BLAKE MANAGER 30 7782 CLARK MANAGER 10 7566 JONES MANAGER 20 ... EMPNO ENAME JOB ... DEPTNO 7839 KING PRESIDENT 10 7698 BLAKE MANAGER 30 7782 CLARK MANAGER 10 7566 JONES MANAGER 20 ... C©u lÖnh UPDATE Söa c¸c hµng ®· tån t¹i b»ng c©u lÖnh update Cã thÓ update nhiÒu h¬n mét hµng trong mét thêi ®iÓm UPDATE table SET column = value [, column = value, ...] [WHERE condition]; CËp nhËt hµng trong b¶ng ChØ ®Þnh c¸c hµng ®îc cËp nhËt nhê mÖnh ®Ò WHERE TÊt c¶ c¸c hµng trong b¶ng ®îc cËp nhËt nÕu bá qua mÖnh ®Ò WHERE SQL> UPDATE emp 2 SET deptno = 20 3 WHERE empno = 7782; 1 row updated. SQL> UPDATE employee 2 SET deptno = 20; 14 rows updated. CËp nhËt víi mÖnh ®Ò subquery trªn nhiÒu cét SQL> UPDATE emp 2 SET (job, deptno) = 3 (SELECT job, deptno 4 FROM emp 5 WHERE empno = 7499) 6 WHERE empno = 7698; 1 row updated. CËp nhËt c¸c trêng job vµ department cña nh©n viªn 7698 vµ víi gi¸ trÞ cña t¬ng øng cña nh©n viªn 7499. CËp nhËt b¶ng dùa vµo gi¸ trÞ cña b¶ng kh¸c Sö dông c¸c subquery ®Ó cËp nhËt gi¸ trÞ cña b¶ng dùa vµo gi¸ trÞ b¶ng kh¸c SQL> UPDATE employee 2 SET deptno = (SELECT deptno 3 FROM emp 4 WHERE empno = 7788) 5 WHERE job = (SELECT job 6 FROM emp 7 WHERE empno = 7788); 2 rows updated. UPDATE emp * ERROR at line 1: ORA-02291: integrity constraint (USR.EMP_DEPTNO_FK) violated - parent key not found SQL> UPDATE emp 2 SET deptno = 55 3 WHERE deptno = 10; CËp nhËt lçi do constraint Department number 55 does not exist ChÌn gi¸ trÞ víi Default Oracle 9i cho phÐp sö dông tõ kho¸ DEFAULT trong c©u lÖnh INSERT hay UPDATE statements: INSERT INTO EMP (EMPNO, ENAME, DEPTNO) VALUES (8000,’MIKE’,DEFAULT); UPDATE EMP SET COMM = DEFAULT; LÖnh MERGE – Võa cã kh¶ n¨ng Insert võa cã kh¶ n¨ng Update. MERGE INTO T1 USING T2 ON (T1.C9=T2.C9) WHEN MATCHED THEN UPDATE SET T1.C1=T2.C2, T1.C2=T2.C2 ... WHEN NOT MATCHED THEN INSERT (C1,C2, ...) VALUES (C1,C2, ...); Insert nhiÒu table LÖnh Insert trªn nhiÒu table: Sö dông mét c©u lÖnh DML ®Ó insert d÷ liÖu lªn nhiªu b¶ng. UNCONDITIONAL (Kh«ng ®iÒu kiÖn) INSERT ALL INTO T1 (C1, C2, ...) VALUES (C1, C2, ...) INTO T2 (C1, C2, ...) VALUES (C1, C2, ...) ... SELECT C1, C2, ... FROM T9; CONDITIONAL (Cã ®iÒu kiÖn) INSERT [ALL|FIRST] WHEN c1 = 1 THEN INTO T1 (C1, C2, ...) VALUES (C1, C2, ...) WHEN c1 = 2 THEN INTO T2 (C1, C2, ...) VALUES (C1, C2, ...) WHEN c2 = 3 THEN INTO T3 (C1, C2, ...) VALUES (C1, C2, ...) ... SELECT C1, C2, ... FROM T9; – FIRST: chØ insert ®èi víi c©u lÖnh ®©u tiªn tho¶ m·n ®iÒu kiÖn; ALL: insert cho tÊt c¶ c¸c c©u lÖnh tho¶ m·n ®iÒu kiÖn. Lo¹i bá hµng tõ b¶ng DEPT DEPTNO DNAME LOC ------ ---------- -------- 10 ACCOUNTING NEW YORK 20 RESEARCH DALLAS 30 SALES CHICAGO 40 OPERATIONS BOSTON 50 DEVELOPMENT DETROIT 60 MIS ... C©u lÖnh DELETE Cã thÓ xãa bá hµng trong b¶ng nhê lÖnh DELETE [FROM] table [WHERE condition]; ChØ ®Þnh c¸c hµng ®îc xãa nhê mÖnh ®Ò where xãa toµn bé c¸c b¶n nghi khi bá qua mÖnh ®Ò where Xãa hµng tõ b¶ng SQL> DELETE FROM department 2 WHERE dname = 'DEVELOPMENT'; 1 row deleted. SQL> DELETE FROM department; 4 rows deleted. Xãa d÷ liÖu trong b¶ng Sö dông subquery ®Ó xãa hµng trong b¶ng SQL> DELETE FROM employee 2 WHERE deptno = 3 (SELECT deptno 4 FROM dept 5 WHERE dname ='SALES'); 6 rows deleted. Lçi xãa hµng d÷ liÖu cã constraint SQL> DELETE FROM dept 2 WHERE deptno = 10; DELETE FROM dept * ERROR at line 1: ORA-02292: integrity constraint (USR.EMP_DEPTNO_FK) violated - child record found that contains a primary key You cannot delete a row that is used as a foreign key in another table. Database Transaction(giao dÞch c¬ së d÷ liÖu) Bao gåm mét trong c©u lÖnh sau: Mét c©u lÖnh DML Mét c©u lÖnh DDL Mét c©u lÖnh DCL Database Transaction B¾t ®Çu khi c©u lÖnh SQL thùc thi KÕt thóc khi ®iÒu kiÖn sau x¶y ra: C©u lÖnh COMMIT hay ROLLBACK x¶y ra C¸c c©u lªnh DDL, DCL thùc thi(tù ®éng commit) User tho¸t ra khái sql plus System ®ãng Nh÷ng lîi ®iÓm cña c©u lÖnh commit vµ rollback §¶m b¶o tÝnh nhÊt qu¸n cña d÷ liÖu Xem d÷ liÖu thay ®æi tríc khi chuyÓn thay ®æi ®ã thËt sù Nhãm logic nhãm to¸n h¹ng §iÒu khiÓn giao dÞch Transaction Savepoint A Savepoint B COMMIT UPDATE INSERT Qu¸ tr×nh tù ®éng commit x¶y ra khi Ch¹y c©u lÖnh DDL Ch¹y c©u lÖnh DCL Tho¸t khái SQL*Plus b×nh thêng Mét c©u lÖnh Rollback tù ®éng ®a ra khi ®ãng SQL*Plus kh«ng b×nh thêng, hay hÖ thèng bÞ háng . Xö lý c¸c giao dÞch b¾t buéc Tr¹ng th¸i cña d÷ liÖu tríc khi Rollback hay Commit Tr¹ng th¸i tríc cña d÷ liÖu cã thÓ ®îc phôc håi. User hiÖn thêi cã thÓ xem kÕt qu¶ cña c©u lÖnh DML Nh÷ng user kh¸c kh«ng thÓ xem kÕt qu¶ cña user hiÖn thêi C¸c hµng bÞ t¸c ®éng sÏ bÞ khãa(locked), c¸c user kh¸c kh«ng thÓ thay ®æi d÷ liÖu cña c¸c hµng bÞ khãa . Tr¹ng th¸i cña d÷ liÖu sau COMMIT D÷ liÖu thay ®æi lµ permanent trong database TÊt c¶ c¸c user cã thÓ xem d÷ liÖu C¸c khãa trªn c¸c hµng ®îc më . Toµn bé c¸c savepoint ®îc xãa. Commit d÷ liÖu SQL> UPDATE emp 2 SET deptno = 10 3 WHERE empno = 7782; 1 row updated. T¹o ra sù thay ®æi T¹o ra sù thay ®æi SQL> COMMIT; Commit complete. Tr¹ng th¸i sau khi ROLLBACK Lo¹i bá toµn bé thay ®æi b»ng lÖnh rollback D÷ liÖu thay ®æi lµ cã thÓ kh«i phôc Tr¹ng th¸i tríc cña d÷ liÖu ®îc kh«i phôc. Khãa trªn c¸c hµng ®îc më. SQL> DELETE FROM employee; 14 rows deleted. SQL> ROLLBACK; Rollback complete. Rollback Back tíi mét thêi ®iÓm ®¸nh dÊu T¹o mét thêi ®iÓm rollback trong transaction b»ng lÖnh savepoint. Roll back tíi thêi ®iÓm ®¸nh dÊu bëi lÖnh ROLLBACK TO SAVEPOINT SQL> UPDATE... SQL> SAVEPOINT update_done; Savepoint created. SQL> INSERT... SQL> ROLLBACK TO update_done; Rollback complete. Møc cña c©u lÖnh Rollback NÕu mét c©u lÖnh DML háng trong qu¸ tr×nh thùc thi th× chØ c©u lÖnh ®ã ®îc rollback Oracle server thiÕt lËp mét savepoint kh«ng b¾t buéc. C¸c user cÇn kÕt thóc c¸c giao dÞch b¾t buéc b»ng c©u lÖnh COMMIT hay ROLLBACK §äc nhÊt qu¸n §äc nhÊt qu¸n ®¶m b¶o c¸ch nh×n nhÊt qu¸n cña d÷ liÖu trong toµn bé thêi gian. Nh÷ng thay ®æi bëi mét user sÏ kh«ng ¶nh hëng tíi thay ®æi cña user kh¸c §äc nhÊt qu¸n ®¶m b¶o trªn cïng mét d÷ liÖu : Ngêi ®äc d÷ liÖu kh«ng ®îi ngêi viÕt d÷ liÖu Ngêi viÕt d÷ liÖu kh«ng ®îi ngêi ®äc d÷ liÖu ThiÕt lËp ®äc nhÊt qu¸n UPDATE empSET sal = 2000 WHERE ename = 'SCOTT'; Datablocks Rollbacksegments changedand unchanged data before change“old” data User A User B Readconsistentimage SELECT *FROM emp; Tæng kÕt Description Adds a new row to the table Modifies existing rows in the table Removes existing rows from the table Makes all pending changes permanent Allows a rollback to the savepoint marker Discards all pending data changes Statement INSERT UPDATE DELETE COMMIT SAVEPOINT ROLLBACK