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的員工部門為77883、數據的刪除(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;
三 數據偽列
ROWNUM(重點)
?? ?ROWNUM為每一個顯示的記錄都會自動的隨著查詢生成的行號。?
ROWID
?? ?ROWID表示的是每一行數據保存的物理地址的編號。
?
總結:
1、多表查詢:在進行查詢語句編寫的時候,一定要確定所需要關聯的數據表,而且只要是表的關聯查詢,就一定會存在笛卡兒積的問題,使用關聯字段消除此問題。在使用多表查詢的時候要考慮到左右連接的問題,oracle之外的數據庫可以使用SQL1999語法控制左右連接。
2、所有的統計函數是用于進行數據統計操作的,而統計要在分組中進行/或者是單獨使用,分組使用GROUP BY子句,是在某一列上存在重復數據的時候才會使用分組操作,而分組后的過濾使用HAVING子句完成,所有的分組函數可以嵌套,但是嵌套之后的分組函數之中不能再有其他的查詢字段,包括分組字段。
3、子查詢:結合限定查詢、多表查詢、分組統計查詢完成各個復雜查詢的操作,子查詢一般在WHERE和FROM之后出現較多。
4、數據庫的更新操作一定要受到事務的控制,事務的兩個命令:COMMIT,ROLLBACK,每一個連接到數據庫上的用戶都用一個會話來表示。
5、數據表的分頁查詢顯示依靠ROWNUM偽列,這個在以后的開發當中必定要使用。
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
總結
以上是生活随笔為你收集整理的day03: oracle的sql增 、删、改,事务处理的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Windoes普通用户使用管理员下安装的
- 下一篇: day06 : 01 Oracle 体