day03: oracle的sql增 、删、改,事务处理
一 數(shù)據(jù)更新(重點)
===============
增刪改 ? ? ?查 ?
- ? ? 數(shù)據(jù)更新包括數(shù)據(jù)的增加、修改、刪除。
- ?? ?為了做實驗,我們將emp表復制一份,使用以下指令:
- ?? ?create table myemp as select * from emp;
- ?? ?這種語法是oracle支持的,其他的數(shù)據(jù)庫不一樣
1、數(shù)據(jù)的增加(insert)
語法: INSERT INTO 表名稱 [(字段1,字段2,字段3,...)] VALUES(值1,值2,值3,...)注意:如果需要進行增加數(shù)據(jù)的話,則以下的幾種數(shù)據(jù)類型要分別處理:增加數(shù)字:直接編寫數(shù)字,如:123;增加字符串:字符串應該使用"'"聲明;增加DATE數(shù)據(jù):第一種:可以按照已有的字符串的格式編寫字符串,如:‘20-6月-06’;第二種:利用TO_DATE函數(shù)將字符串變?yōu)镈ATE型數(shù)據(jù);第三種:如果設置的時間為當前系統(tǒng)時間,則使用SYSDATE; 對于數(shù)據(jù)的增加有兩種操作格式:完整型: SQL> insert into myemp(empno,ename,hiredate, sal,mgr,job,comm)2 values (8888,'reyn',to_date('1990-11-13','yyyy-mm-dd'),8000,7369,'daza',1000); SQL> insert into myemp (empno,ename,hiredate,sal,mgr,job,deptno) 2 values(8889,'hahah',sysdate,3000,7369,'daza',30);簡單型:(不寫列名稱) SQL> insert into myemp2 values(8890,'xixi',sysdate,3000,7369,'daza',40); XXXX ORA-00947: not enough values正確:需要按照列名稱的順序來寫,必須符合字段的要求,一般開發(fā)中不使用 SQL> insert into myemp values(2 8899,'xixi','daza',7369,sysdate,3000,null,30);2、數(shù)據(jù)的修改(update)
語法: UPDATE 表名稱 SET 更新字段1=更新值1,更新字段2=更新值2,...[WHERE 更新條件(s)];SQL> update myemp set sal=7000,comm=3000,job='manager',hiredate=sysdate where empno=7369;//更新編號為7369的員工,工資為7000,獎金3000,職位 manager,職位更新時間為當前時間 SQL> update myemp set sal=7500; //更新所有員工工資為7500 SQL> rollback; //回滾數(shù)據(jù) SQL> update myemp set empno=7788 where empno=7369; //更新編號為7369的員工部門為77883、數(shù)據(jù)的刪除(dalete)
數(shù)據(jù)的刪除 語法: DELETE FROM 表名稱 [WHERE 刪除條件(s)];SQL> delete from myemp where to_char(hiredate,'yyyy')=1987; //刪除1987年入職的員工注意:如果刪除的時候沒有相應匹配條件的時候,則更新記錄為0,更新操作也一樣。 SQL> delete from myemp; //刪除myemp表中所有數(shù)據(jù) SQL> select * from myemp;注意:對于刪除操作,盡可能少使用,因為刪除操作對于查詢操作要危險許多。提示:對于刪除操作,在開發(fā)時對于所有的刪除操作之前先給出一個提示框,以防止誤刪除。?二? 事務處理
=========
?? ?對于數(shù)據(jù)表的操作,查詢要比更新操作更安全,因為更新操作有可能會出現(xiàn)錯誤,導致沒有按照既定的要求正確的完成更新操作。
?? ?在很多時候更新可能由多條語句共同完成,如銀行轉(zhuǎn)賬:
?? ??? ?-判斷A的賬戶上是否有5000W ? ? select yue+shouxufei>5000+sxf from zhanghu where id=a
?? ??? ?-判斷B的賬戶狀態(tài)是否正常 ? ? ?select id,status from zhanghu where id=b
?? ??? ?-從A的賬戶上移走5000W ? ? ? ? update zhanghu set yue-5000 where id=a
?? ??? ?-向B的賬戶上增加5000W?? ??? ? ?update zhanghu set yue+5000 where ?id=b
?? ??? ?-向銀行支付手續(xù)費5W ? ? ? ? ? update zhanghu set yue+shouxufei where id=yinhang
?? ?以上五個數(shù)據(jù)操作是一個整體,可以理解為一個完整的業(yè)務,如果其中第三點出錯,其他操作該怎么辦?
?? ?如果有操作出現(xiàn)錯誤,那么其他操作應該不再繼續(xù)執(zhí)行,并且都回歸到最原始的狀態(tài),而這一個流程的操作實際上就是事務的操作。
#回滾之前的操作
rollback;
三 數(shù)據(jù)偽列
ROWNUM(重點)
?? ?ROWNUM為每一個顯示的記錄都會自動的隨著查詢生成的行號。?
ROWID
?? ?ROWID表示的是每一行數(shù)據(jù)保存的物理地址的編號。
?
總結(jié):
1、多表查詢:在進行查詢語句編寫的時候,一定要確定所需要關聯(lián)的數(shù)據(jù)表,而且只要是表的關聯(lián)查詢,就一定會存在笛卡兒積的問題,使用關聯(lián)字段消除此問題。在使用多表查詢的時候要考慮到左右連接的問題,oracle之外的數(shù)據(jù)庫可以使用SQL1999語法控制左右連接。
2、所有的統(tǒng)計函數(shù)是用于進行數(shù)據(jù)統(tǒng)計操作的,而統(tǒng)計要在分組中進行/或者是單獨使用,分組使用GROUP BY子句,是在某一列上存在重復數(shù)據(jù)的時候才會使用分組操作,而分組后的過濾使用HAVING子句完成,所有的分組函數(shù)可以嵌套,但是嵌套之后的分組函數(shù)之中不能再有其他的查詢字段,包括分組字段。
3、子查詢:結(jié)合限定查詢、多表查詢、分組統(tǒng)計查詢完成各個復雜查詢的操作,子查詢一般在WHERE和FROM之后出現(xiàn)較多。
4、數(shù)據(jù)庫的更新操作一定要受到事務的控制,事務的兩個命令:COMMIT,ROLLBACK,每一個連接到數(shù)據(jù)庫上的用戶都用一個會話來表示。
5、數(shù)據(jù)表的分頁查詢顯示依靠ROWNUM偽列,這個在以后的開發(fā)當中必定要使用。
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
總結(jié)
以上是生活随笔為你收集整理的day03: oracle的sql增 、删、改,事务处理的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Windoes普通用户使用管理员下安装的
- 下一篇: day04 : SQL_DDL, 表