午夜国产狂喷潮在线观看|国产AⅤ精品一区二区久久|中文字幕AV中文字幕|国产看片高清在线

    Oracle數(shù)據(jù)庫入門之DML與事務控制
    來源:易賢網(wǎng) 閱讀:1150 次 日期:2014-09-17 10:39:59
    溫馨提示:易賢網(wǎng)小編為您整理了“Oracle數(shù)據(jù)庫入門之DML與事務控制”,方便廣大網(wǎng)友查閱!

    insert語句

    語法:insert into table [(column1, column2...)] values (value1, value2...);

    說明:insert語句每次只能向表中插入一條記錄。缺省字段名列表時,應為新插入記錄中的每個字段顯式的設定新值

    也可在insert語句中指定賦值字段列表,只為部分字段顯式設定新值,其余字段將被缺省賦值為null

    舉例:insert into dept values(88,'研發(fā)部','北京');--此句便是缺省字段名列表的情況

    insert into dept values(66,'美工部');--這句將執(zhí)行出錯,提示為沒有足夠的值。即必須為所有字段設定值

    insert into dept(deptno,dname) values(99,'財務部');--也可以單獨為deptno和dname字段賦值

    select table_name from user_tables;--用到了數(shù)據(jù)字典表。目的是查詢當前用戶方案下所有的表的名字

    select user from dual;--查詢當前連接到數(shù)據(jù)庫的用戶名

    補充:可以在insert語句中使用子查詢,實現(xiàn)表間數(shù)據(jù)拷貝。在現(xiàn)實開發(fā)中很少用的到,有點類似Java中的數(shù)組拷貝

    比如insert into dept1(id, name) select deptno, dname from dept;

    此時不必再給出values子句。子查詢中的值列表應與insert子句中的字段列表相匹配

    實現(xiàn)數(shù)據(jù)復制的時候,也可以在應用程序層面采用這種方式進行數(shù)據(jù)備份,但一般來說這種備份是不可靠的

    應該在數(shù)據(jù)庫的層面做備份,也可以由DBA對整個數(shù)據(jù)庫做自動的數(shù)據(jù)備份處理,包括出現(xiàn)問題的時候的恢復

    update語句

    語法:update table set column1=value1 [, column2=value2, ...] [where condition];

    說明:update語句用于更新表中的數(shù)據(jù)。update語句每次可更新多條記錄

    可使用where子句限定要更新的記錄,如果缺省where子句,則更新表中的所有記錄

    舉例:update emp set sal=sal+88;--將所有員工的工資都漲88元錢

    update student2 set phone='010-51288984' where name='張三';--將張三的電話改為010-51288984

    delete語句

    語法:delete [from] table [where condition];

    說明:delete語句用于從表中刪除數(shù)據(jù)。delete語句每次可刪除多條記錄

    可使用where子句限定要刪除的記錄,如果缺省where子句,則刪除表中的所有記錄

    delete語句并不是刪除整個表,只是刪除表中的記錄,表仍然存在,還可用來存放數(shù)據(jù)

    舉例:delete emp;--等價于delete from emp;

    delete emp where empno=7778;--刪除empno字段的值為7778的所有記錄

    merge語句

    概述:merge語句用于進行數(shù)據(jù)合并,它是根據(jù)條件在表中執(zhí)行數(shù)據(jù)的修改或插入操作

    如果要插入的記錄在目標表中已經(jīng)存在,則執(zhí)行更新操作,否則執(zhí)行插入操作

    實際開發(fā)的過程中使用它的機會并不是很多

    語法:merge into table [alias]

    using(table|view|sub_query) [alias]

    on(join_condition)

    when matched then

    update set col1=col1_val, col2=col2_val

    when not matched then

    insert (column_list) values(column_values);

    舉例:create table test1(eid number(10), name varchar2(20), birth date, salary number(8,2));

    insert into test1 values (1001, 'Stone', '21-1月-10', 8888);

    insert into test1 values (1002, 'Smith', '04-1月-09', 6666);

    select * from test1;

    create table test2(eid number(10), name varchar2(20), birth date, salary number(8,2));

    select * from test2;

    merge into test2

    using test1

    on(test1.eid=test2.eid)

    when matched then

    update set name=test1.name,birth=test1.birth,salary=test1.salary

    when not matched then

    insert (eid, name, birth) values(test1.eid, test1.name, test1.birth);

    select * from test2;

    說明:set設定的是目標表中的字段。即將源表中的字段值賦給目標表中的字段

    insert設定的也是將字段值插入到目標表中。如果要插入全部的字段的值,那么column_list是可以省略的

    注意:由于set和insert默認都是對目標表進行操作,所以,它們后面的字段不可以加目標表前綴

    即本例中若出現(xiàn)set test2.name=test1.name或insert (test2.eid),執(zhí)行則出錯,提示信息為標識符無效

    事務控制

    概述:也叫做事務處理。是通過將一組相關操作組合為一個要么全部成功,要么全部失敗的邏輯工作單元

    以簡化錯誤恢復,提高應用程序的可靠性。這里指的是在數(shù)據(jù)庫層面所進行的一種數(shù)據(jù)庫操作的集成或者說單元化控制

    也可以在應用程序層面進行類似的處理。比如說逐個向數(shù)據(jù)庫發(fā)送多條DML指令,通過先后更新兩個表以對應轉賬操作

    如果后面的一個操作出錯了,那么就取消前一個指令,或者進行相反的對沖的操作

    但應用程序層面的這種原子的組合,實際上是不可靠的。在數(shù)據(jù)庫的層面或者在底層來進行這種集成,會更有效有些

    事務:組成單個邏輯工作單元的一系列操作被稱為事務(Transaction)。實際上事務不是僅限于在數(shù)據(jù)庫領域中的一個概念

    數(shù)據(jù)庫事務通常由0到多條DML語句或1條DDL(Data Define Language)語句或1條DCL(Data Control Language)語句組成

    所謂的單個邏輯工作單元就是能夠完成一個相對獨立的功能,或者說是不應該分隔開的一個操作系列

    比如銀行的轉賬業(yè)務,該業(yè)務至少可以分為A賬戶的轉出和B賬戶的轉入。也就是從A賬戶的余額中減掉一定的數(shù)額

    然后再將B賬戶的余額增加一定的數(shù)額。整個過程等于是修改了兩條記錄,這兩個操作就可以認為就組成了一個事務

    它們應該是一個單個的邏輯工作單元,也就是銀行的一個單筆業(yè)務

    ACID:事務必須滿足ACID屬性,即原子性(Atomicity)、一致性(Consistency)、隔離性(Isolation)、持久性(Durability)

    原子性:即事務中所有操作要么全成功,要么全失敗,它們應該作為一個整體被處理

    一致性:事務執(zhí)行完畢之后,數(shù)據(jù)必須處于一致性的狀態(tài),不能出現(xiàn)數(shù)據(jù)狀態(tài)上的錯誤。比如將員工工資級別從C升到B級

    但工資卻沒有從應該的4000升到6000,于是就出現(xiàn)了數(shù)據(jù)的不一致。也就是說這時的工資級別雖然是B級

    但工資的數(shù)額卻屬于C級的范圍。這就說明事務結束的時候,數(shù)據(jù)處于一種不一致性的狀態(tài),會影響后續(xù)的使用

    隔離性:這是相對其它事務而言的。有時可能出現(xiàn)多個事務并發(fā)執(zhí)行的情況,比如多個用戶同時對同一個數(shù)據(jù)庫表進行操作

    碰巧操縱的又是該表的同一個數(shù)據(jù)。此時應該有這樣的一個保證,即當前事務在執(zhí)行過程中所做的數(shù)據(jù)狀態(tài)的改變

    是不受其它事務影響的。其它事務所讀取或查看的數(shù)據(jù),仍是當前事務執(zhí)行之前的狀態(tài)

    直到當前事務結束,其它事務看到的才會是當前事務結束之后的數(shù)據(jù)狀態(tài)

    所有事務中間的狀態(tài)對其它事務而言,是被隔離開的,不受其它事務影響

    持久性:當事務執(zhí)行完畢并提交操作之后,數(shù)據(jù)將永久生效,永久保存在數(shù)據(jù)庫中,將來不可撤銷,不可恢復

    開始:事務開始于第一條可執(zhí)行語句

    結束:當遇到commit或rollback語句、遇到DDL或DCL語句、用戶會話結束、系統(tǒng)崩潰等情況時會結束事務

    提交:在執(zhí)行一個DDL語句、執(zhí)行一個DCL語句、正常結束會話等情況下會自動提交事務

    提交就是讓事務永久生效,不可撤銷?;貪L就是撤銷先前操作,但回滾到事務開始之前的狀態(tài)時,數(shù)據(jù)仍然是一致的

    回滾:當會話異常終止或系統(tǒng)崩潰時,事務會被自動回滾。事務的顯式的提交和回滾操作是為了更好的保證數(shù)據(jù)的一致性

    狀態(tài):事務回滾后:數(shù)據(jù)的修改被撤銷。數(shù)據(jù)恢復到修改前的狀態(tài)。記錄鎖被釋放

    事務提交后:數(shù)據(jù)的修改永久生效,不可撤銷。數(shù)據(jù)以前的狀態(tài)永久性丟失,無法恢復。保存點(savepoints)被清除

    所有用戶(會話)都將看到操作后的結果。記錄鎖被釋放,其它用戶此時才可以對這些數(shù)據(jù)進行修改操作

    提交或回滾前:事務中DML操作結果只對當前用戶(會話)可見,其它用戶(會話)看不到當前事務中數(shù)據(jù)的改變,直到事務結束

    事務中DML語句所涉及到的行會被鎖定,其它用戶(會話)不能對其進行修改操作,但可以查詢

    事務中數(shù)據(jù)狀態(tài)的改變是可以恢復的

    SqlPlus的自動提交

    概述:SqlPlus中執(zhí)行SQL語句時可以設置是否自動提交,缺省為非自動提交。這里的提交指的不是事務,而是SqlPlus的每條語句

    將來在commit或正常關閉窗口即關閉本地到數(shù)據(jù)庫連接的時候,Sql Plus中的語句也會被自動的提交

    設置:show autocommit;--查看設置。其中autocommit OFF表示當前設置為非自動提交,而autocommit IMMEDIATE代表自動提交

    set autocommit on;--更改為自動提交。set autocommit off;--更改為非自動提交

    舉例:insert into dept values(88,'Stone','Beijing');

    select * from dept;

    說明:自動提交狀態(tài)為OFF的情況下,這是一個未提交的事務。插入新記錄的操作并沒有永久生效,只是當前用戶(會話)可見

    其它會話中看不見這個未提交事務,即使當前用戶再一次連接到數(shù)據(jù)庫,即建立了一個新的會話,也查詢不到88號記錄

    比如不關閉當前SQLPlus,然后再打開一個SQLPlus窗口,并使用當前登錄的scott用戶再一次登錄新打開的SQLPlus窗口

    然后執(zhí)行查詢,在結果中根本沒有查詢到前一次會話中沒有提交的操作指令,即查詢結果中沒有88號記錄

    這時可以在原SQLPlus窗口中顯式的提交一下,即執(zhí)行commit指令。提交完成后,插入88號記錄的操作便永久生效了

    然后回到后打開的SQLPlus窗口中執(zhí)行查詢,查詢結果中很自然的就查到了88號記錄

    也就是說已經(jīng)提交的事務影響所有其它的事務和會話。而對于未提交的事務,其它用戶(會話)是看不見的

    保存點(Savepoint)

    概述:通過保存點在當前的事務中創(chuàng)建標記,將來可回退到指定的標記(保存點)處,實現(xiàn)事務的部分回滾

    舉例:insert into dept values(55,'Adv','Beijing');

    insert into dept values(56,'Sec','Shanghai');

    savepoint p1;

    insert into dept values(57,'Acc','Dalian');

    select * from dept;

    rollback to p1;

    select * from dept;

    說明:前提是當前SqlPlus的設置是非自動提交。所以這些都是當前會話中未提交的事務

    代碼執(zhí)行時p1之后的數(shù)據(jù)狀態(tài)的改變被撤銷,p1之前的操作仍然存在

    若執(zhí)行rollback;則回滾到整個事務的最初

    更多信息請查看IT技術專欄

    更多信息請查看數(shù)據(jù)庫
    易賢網(wǎng)手機網(wǎng)站地址:Oracle數(shù)據(jù)庫入門之DML與事務控制

    2025國考·省考課程試聽報名

    • 報班類型
    • 姓名
    • 手機號
    • 驗證碼
    關于我們 | 聯(lián)系我們 | 人才招聘 | 網(wǎng)站聲明 | 網(wǎng)站幫助 | 非正式的簡要咨詢 | 簡要咨詢須知 | 新媒體/短視頻平臺 | 手機站點 | 投訴建議
    工業(yè)和信息化部備案號:滇ICP備2023014141號-1 云南省教育廳備案號:云教ICP備0901021 滇公網(wǎng)安備53010202001879號 人力資源服務許可證:(云)人服證字(2023)第0102001523號
    聯(lián)系電話:0871-65099533/13759567129 獲取招聘考試信息及咨詢關注公眾號:hfpxwx
    咨詢QQ:1093837350(9:00—18:00)版權所有:易賢網(wǎng)