日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

day03: oracle的sql增 、删、改,事务处理

發(fā)布時(shí)間:2025/4/16 编程问答 40 豆豆
生活随笔 收集整理的這篇文章主要介紹了 day03: oracle的sql增 、删、改,事务处理 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

一 數(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的員工部門為7788

3、數(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;

#再次查看myemp表,確認(rèn)其中的數(shù)據(jù)情況 SQL> select * from myemp;所有的事務(wù)處理都是針對(duì)每一個(gè)會(huì)話進(jìn)行的,在oracle中,把每一個(gè)連接到數(shù)據(jù)庫(kù)的用戶都稱為一個(gè)會(huì)話,每一個(gè)會(huì)話之間彼此獨(dú)立,互不通信,每一個(gè)會(huì)話獨(dú)享自己的事務(wù)控制,而事務(wù)控制之中主要使用兩個(gè)命令:事務(wù)的回滾:ROLLBACK,更新操作回到原點(diǎn)事務(wù)的提交:COMMIT,真正的發(fā)出更新請(qǐng)求,一旦提交后無法回滾eg: #在會(huì)話1中刪除一條數(shù)據(jù),從另一個(gè)會(huì)話來查詢數(shù)據(jù)會(huì)話1 delete from myemp where empno=7369;會(huì)話1 select * from myemp;會(huì)話2 select * from myemp;#在會(huì)話1中回滾之前的更新操作,再次刪除數(shù)據(jù),然后提交,再在兩個(gè)會(huì)話中查詢數(shù)據(jù),在會(huì)話1中進(jìn)行回滾發(fā)現(xiàn)已經(jīng)無法回滾了。會(huì)話1 delete from myemp where empno=7369;會(huì)話1 commit;會(huì)話1 select * from myemp;會(huì)話2 select * from myemp;注意:這種事務(wù)控制會(huì)出現(xiàn)一些問題,例如,某一個(gè)會(huì)話在更新數(shù)據(jù)表的時(shí)候還沒有提交事務(wù),其他會(huì)話是無法進(jìn)行更新的,必須等待之前的會(huì)話提交后才可以。 eg: #死鎖,會(huì)話1執(zhí)行更新后,在沒有提交之前,會(huì)話2進(jìn)行更新會(huì)出現(xiàn)等待會(huì)話1 update myemp set sal=9000 where empno=7839;會(huì)話2 update myemp set sal=8000 where empno=7839;這種問題從大的方面來講可以稱作死鎖,但是在oracle之中死鎖有很多種類.所有的數(shù)據(jù)更新一定都會(huì)受到事務(wù)的控制。

三 數(shù)據(jù)偽列

ROWNUM(重點(diǎn))
?? ?ROWNUM為每一個(gè)顯示的記錄都會(huì)自動(dòng)的隨著查詢生成的行號(hào)。?

SQL> select rownum,empno,ename,job,hiredate,sal from emp;//#查詢emp表的rownum,empno,ename,job,hiredate和sal 該行號(hào)不是永久的,會(huì)隨著查詢的顯示變化而變化SQL> select rownum,empno,ename,job,hiredate,sal from emp where deptno=30;//#查詢emp表的rownum,empno,ename,job,hiredate和sal SQL> select rownum,empno,ename,job,hiredate,sal from emp where rownum<=5;//#查詢前五條記錄#查詢6-10行記錄 錯(cuò)誤查詢: SQL> select rownum,empno,ename,job,hiredate,sal from emp where rownum between 6 and 10; //執(zhí)行完成后并沒有返回任何數(shù)據(jù),因?yàn)閞ownum不是真實(shí)列,正確的思路是先查詢前10條記錄,然后再查詢后5條記錄,需要使用子查詢 正確查詢: SQL> select * from (select rownum rn,empno,ename,job,hiredate,sal from emp2 where rownum<=10) temp where temp.rn> 5;

ROWID
?? ?ROWID表示的是每一行數(shù)據(jù)保存的物理地址的編號(hào)。

SQL> select rowid, deptno, dname, loc from dept;每一條記錄的ROWID都不會(huì)重復(fù),所以即使所有列的內(nèi)容重復(fù),ROWID也不會(huì)重復(fù). 格式為:AAAL+XAAEAAAAANAAA其中: 數(shù)據(jù)對(duì)象號(hào):AAAL+X相對(duì)文件號(hào):AAE數(shù)據(jù)塊號(hào): AAAAAN數(shù)據(jù)行號(hào): AAA

?

總結(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)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。