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