日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

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

發布時間:2025/4/16 95 豆豆
生活随笔 收集整理的這篇文章主要介紹了 day03: oracle的sql增 、删、改,事务处理 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

一 數據更新(重點)

===============
增刪改 ? ? ?查 ?

  • ? ? 數據更新包括數據的增加、修改、刪除。
  • ?? ?為了做實驗,我們將emp表復制一份,使用以下指令:
  • ?? ?create table myemp as select * from emp;
  • ?? ?這種語法是oracle支持的,其他的數據庫不一樣

1、數據的增加(insert)

語法: INSERT INTO 表名稱 [(字段1,字段2,字段3,...)] VALUES(值1,值2,值3,...)注意:如果需要進行增加數據的話,則以下的幾種數據類型要分別處理:增加數字:直接編寫數字,如:123;增加字符串:字符串應該使用"'"聲明;增加DATE數據:第一種:可以按照已有的字符串的格式編寫字符串,如:‘20-6月-06’;第二種:利用TO_DATE函數將字符串變為DATE型數據;第三種:如果設置的時間為當前系統時間,則使用SYSDATE; 對于數據的增加有兩種操作格式:完整型: 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正確:需要按照列名稱的順序來寫,必須符合字段的要求,一般開發中不使用 SQL> insert into myemp values(2 8899,'xixi','daza',7369,sysdate,3000,null,30);

2、數據的修改(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; //回滾數據 SQL> update myemp set empno=7788 where empno=7369; //更新編號為7369的員工部門為7788

3、數據的刪除(dalete)

數據的刪除 語法: DELETE FROM 表名稱 [WHERE 刪除條件(s)];SQL> delete from myemp where to_char(hiredate,'yyyy')=1987; //刪除1987年入職的員工注意:如果刪除的時候沒有相應匹配條件的時候,則更新記錄為0,更新操作也一樣。 SQL> delete from myemp; //刪除myemp表中所有數據 SQL> select * from myemp;注意:對于刪除操作,盡可能少使用,因為刪除操作對于查詢操作要危險許多。提示:對于刪除操作,在開發時對于所有的刪除操作之前先給出一個提示框,以防止誤刪除。

?二? 事務處理

=========
?? ?對于數據表的操作,查詢要比更新操作更安全,因為更新操作有可能會出現錯誤,導致沒有按照既定的要求正確的完成更新操作。
?? ?在很多時候更新可能由多條語句共同完成,如銀行轉賬:
?? ??? ?-判斷A的賬戶上是否有5000W ? ? select yue+shouxufei>5000+sxf from zhanghu where id=a
?? ??? ?-判斷B的賬戶狀態是否正常 ? ? ?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
?? ??? ?-向銀行支付手續費5W ? ? ? ? ? update zhanghu set yue+shouxufei where id=yinhang
?? ?以上五個數據操作是一個整體,可以理解為一個完整的業務,如果其中第三點出錯,其他操作該怎么辦?
?? ?如果有操作出現錯誤,那么其他操作應該不再繼續執行,并且都回歸到最原始的狀態,而這一個流程的操作實際上就是事務的操作。
#回滾之前的操作
rollback;

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

三 數據偽列

ROWNUM(重點)
?? ?ROWNUM為每一個顯示的記錄都會自動的隨著查詢生成的行號。?

SQL> select rownum,empno,ename,job,hiredate,sal from emp;//#查詢emp表的rownum,empno,ename,job,hiredate和sal 該行號不是永久的,會隨著查詢的顯示變化而變化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行記錄 錯誤查詢: SQL> select rownum,empno,ename,job,hiredate,sal from emp where rownum between 6 and 10; //執行完成后并沒有返回任何數據,因為rownum不是真實列,正確的思路是先查詢前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表示的是每一行數據保存的物理地址的編號。

SQL> select rowid, deptno, dname, loc from dept;每一條記錄的ROWID都不會重復,所以即使所有列的內容重復,ROWID也不會重復. 格式為:AAAL+XAAEAAAAANAAA其中: 數據對象號:AAAL+X相對文件號:AAE數據塊號: AAAAAN數據行號: AAA

?

總結:
1、多表查詢:在進行查詢語句編寫的時候,一定要確定所需要關聯的數據表,而且只要是表的關聯查詢,就一定會存在笛卡兒積的問題,使用關聯字段消除此問題。在使用多表查詢的時候要考慮到左右連接的問題,oracle之外的數據庫可以使用SQL1999語法控制左右連接。
2、所有的統計函數是用于進行數據統計操作的,而統計要在分組中進行/或者是單獨使用,分組使用GROUP BY子句,是在某一列上存在重復數據的時候才會使用分組操作,而分組后的過濾使用HAVING子句完成,所有的分組函數可以嵌套,但是嵌套之后的分組函數之中不能再有其他的查詢字段,包括分組字段。
3、子查詢:結合限定查詢、多表查詢、分組統計查詢完成各個復雜查詢的操作,子查詢一般在WHERE和FROM之后出現較多。
4、數據庫的更新操作一定要受到事務的控制,事務的兩個命令:COMMIT,ROLLBACK,每一個連接到數據庫上的用戶都用一個會話來表示。
5、數據表的分頁查詢顯示依靠ROWNUM偽列,這個在以后的開發當中必定要使用。

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

總結

以上是生活随笔為你收集整理的day03: oracle的sql增 、删、改,事务处理的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。