




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認(rèn)領(lǐng)
文檔簡介
MySQL數(shù)據(jù)庫應(yīng)用
項目教程項目五數(shù)據(jù)庫編程5.1SQL編程基礎(chǔ)
5.2存儲過程和存儲函數(shù)5.3觸發(fā)器、事務(wù)和鎖
5.1SQL編程基礎(chǔ)
5.1.1SQL語言基礎(chǔ)SQL語言是一系列操作數(shù)據(jù)庫及數(shù)據(jù)庫對象的命令語句,因此必須了解基本語法和流程語句的構(gòu)成,主要包括常量和變量、表達式、運算符、控制語句等。1.常量和變量MariaDB的體系結(jié)構(gòu)封裝了SQL接口、查詢解析器、查詢優(yōu)化器、查詢執(zhí)行引擎、緩存/緩沖機制以及一個插件式存儲引擎。(1)常量。常量也稱為文字值或標(biāo)量值,是指程序運行中值始終不變的量。在SQL程序設(shè)計過程中,常量的格式取決于它所表示的值的數(shù)據(jù)類型。十進制整型常量、十六進制整型常量、實型常量、字符串常量、日期常量、布爾常量、位字段值、NULL值5.1SQL編程基礎(chǔ)5.1.1SQL語言基礎(chǔ)1.常量和變量(2)變量。變量就是在程序執(zhí)行過程中,值是可以改變的量①全局變量和會話變量。顯示系統(tǒng)變量可以使用SHOWVARIABLES語句,語法格式:SHOW[GLOBAL|SESSION]VARIABLES[LIKE‘字符串’];【例1】查看系統(tǒng)變量。查詢所連接的MariaDB數(shù)據(jù)庫的所有全局變量。SHOWGLOBALVARIABLES;查詢所連接的MariaDB數(shù)據(jù)庫中以a開頭的會話變量。SHOWVARIABLESLIKE‘a(chǎn)%’;5.1SQL編程基礎(chǔ)5.1.1SQL語言基礎(chǔ)1.常量和變量【例2】修改系統(tǒng)變量的操作。查詢?nèi)肿兞縮ort_buffer_size的值,然后將其值增加5000并再次查看。SELECT@@GLOBAL.sort_buffer_size;SET@@GLOBAL.sort_buffer_size=@@GLOBAL.sort_buffer_size+5000;SELECT@@GLOBAL.sort_buffer_size;當(dāng)前會話變量sql_select_limit決定了SELECT語句的結(jié)果集中的最大行數(shù)。查看當(dāng)前會話變量sql_select_limit的值,并將其值修改為500。SELECT@@SESSION.sql_select_limit;SET@@SESSION.sql_select_limit=500;SELECT@@SESSION.sql_select_limit;SELECT@@GLOBAL.sql_select_limit;5.1SQL編程基礎(chǔ)5.1.1SQL語言基礎(chǔ)1.常量和變量②用戶變量。用戶變量指的是用戶自己定義的變量。定義和初始化一個用戶變量使用SET
語句或SELECT語句。語法格式:SET<@用戶變量名>[∶]=<表達式>[,<@用戶變量名>[∶]=<表達式>,...];SELECT<@用戶變量名>∶=<表達式>[,<@用戶變量名>∶=<表達式>,...];5.1SQL編程基礎(chǔ)5.1.1SQL語言基礎(chǔ)1.常量和變量③局部變量。局部變量的作用范圍是在BEGIN...END語句塊中,可以使用DECLARE語句進行定義,然后為變量進行賦值。在Mar-iaDB中,定義局部變量的語法格式:DECLARE<局部變量名>[,...]<數(shù)據(jù)類型>[DEFAULTvalue];【例3】局部變量的操作。定義局部變量myvar,數(shù)據(jù)類型為INT,默認(rèn)值為5。DECLAREmyvarINTDEFAULT5;為局部變量賦值50。SETmyvar=50;5.1SQL編程基礎(chǔ)5.1.1SQL語言基礎(chǔ)2.運算符MariaDB支持使用運算符。通過運算符,不僅可以使數(shù)據(jù)庫的功能更加強大,而且可以更加靈活地使用數(shù)據(jù)表中的數(shù)據(jù)。MariaDB運算符包括四類,分別是算術(shù)運算符、比較運算符、邏輯運算符和位運算符。(1)算術(shù)運算符。算術(shù)運算符是SQL語言中最常用的運算符,主要是對數(shù)值運算使用的。算術(shù)運算符主要包括加、減、乘、除和取余五種。(2)比較運算符。比較運算符主要用于比較兩個表達式的值,其運算結(jié)果為邏輯值,有1(真)、0(假)及NULL(不能確定)三種情況。運算符<>和!=用來判斷數(shù)字值、字符串、表達式等是否不相等。如果不相等,結(jié)果返回1;如果相等,結(jié)果返回0。5.1SQL編程基礎(chǔ)5.1.1SQL語言基礎(chǔ)2.運算符【例4】算術(shù)運算符和比較運算符的操作。使用算術(shù)運算符對教學(xué)管理數(shù)據(jù)庫teaching_management中的學(xué)生選修課程信息表student_course的學(xué)生成績score字段值進行加、減、乘、除和求余運算。SELECTscore,score+10,score-10,score?10,score/10,score%10FROMteaching_management.student_course;運用運算符<>和!=判斷教學(xué)管理數(shù)據(jù)庫teaching_management中的學(xué)生選修課程信息表student_course的學(xué)生成績score字段值是否等于80。SELECTstudent_no,score<>80,score!=80FROMteaching_management.student_course;5.1SQL編程基礎(chǔ)5.1.1SQL語言基礎(chǔ)2.運算符(3)邏輯運算符。邏輯運算符又稱布爾運算符,用來判斷表達式的真假。邏輯運算符的返回結(jié)果只有1和0。如果表達式是真,結(jié)果將返回1;如果表達式是假,結(jié)果將返回0。MariaDB中支持與、或、非和異或四種邏輯運算符。(4)位運算符。位運算符是使用二進制數(shù)進行計算的運算符。位運算會先將操作數(shù)變成二進制數(shù),然后進行位運算,最后再將計算結(jié)果從二進制數(shù)轉(zhuǎn)換為十進制數(shù)。在MariaDB中有六種位運算符,分別是按位與、按位或、按位取反、按位異或、按位左移和按位右移。(5)運算符的優(yōu)先級。運算符的優(yōu)先級決定了不同的運算符在表達式中計算的先后順序。5.1SQL編程基礎(chǔ)5.1.1SQL語言基礎(chǔ)3.SQL流程控制語句在SQL語言中,流程控制語句就是用來控制程序執(zhí)行流程的語句,也稱流控制語句或控制流語句。在MariaDB中,這些流程控制語句和局部變量只能在存儲過程或函數(shù)、觸發(fā)器或事務(wù)的定義中出現(xiàn)。(1)BEGIN...END語句塊。語法格式:[begin_label:]BEGIN[statement_list]END[end_label];5.1SQL編程基礎(chǔ)5.1.1SQL語言基礎(chǔ)3.SQL流程控制語句【例5】編寫一個簡單代碼塊。
DELIMITERCREATEPROCEDUREexample_begin()BEGINDECLARExTINYINTUNSIGNEDDEFAULT1;BEGIN DECLARExTINYINTUNSIGNEDDEFAULT2;DECLAREyTINYINTUNSIGNEDDEFAULT10;SELECTx,y;/?查詢局部變量x,y的值?/END;SELECTx;END;DELIMITER;CALLexample_begin();5.1SQL編程基礎(chǔ)(2)IF...ELSE條件語句。它可以指定SQL語句的執(zhí)行條件。如果條件為真,則執(zhí)行條件表達式后面的SQL語句;如果條件為假,則可以用ELSE關(guān)鍵字指定要執(zhí)行的SQL語句。語法格式:IF<表達式>THENstatement_list[ELSEIF<表達式>THENstatement_list]...[ELSEstatement_list]ENDIF;5.1.1SQL語言基礎(chǔ)3.SQL流程控制語句【例6】查詢康養(yǎng)學(xué)院的辦公室位置。如果查詢結(jié)果為空,則顯示“辦公地點不詳”,否152則顯示其辦公地點。DELIMITER//CREATEPROCEDUREexample_if()BEGINUSEteaching_management;IF(SELECTofficeFROMdepartment_infoWHEREname=‘康養(yǎng)學(xué)院’)ISNULLTHEN SELECT‘辦公地點不詳’AS辦公地點;ELSE SELECTofficeFROMteaching_management.department_infoWHEREname=‘康養(yǎng)學(xué)院’;ENDIF; END; DELIMITER;CALLexample_if();5.1SQL編程基礎(chǔ)5.1.1SQL語言基礎(chǔ)3.SQL流程控制語句(3)CASE分支語句。CASE關(guān)鍵字可根據(jù)表達式的真假來確定是否返回某個值,允許表達式的任何位置使用這一關(guān)鍵字。使用CASE語句可以進行多個分支的選擇,CASE語句具有如下兩種格式。
①簡單格式。將某個表達式與一組簡單表達式進行比較以確定結(jié)果。CASEcase_value WHENwhen_valueTHENstatement_list[WHENwhen_valueTHENstatement_list]...[ELSEstatement_list]ENDCASE;②搜索格式。計算一組布爾表達式以確定結(jié)果。CASEWHENsearch_conditionTHENstatement_list[WHENsearch_conditionTHENstatement_list]...[ELSEstatement_list]ENDCASE;5.1SQL編程基礎(chǔ)5.1.1SQL語言基礎(chǔ)3.SQL流程控制語句(4)循環(huán)語句。在SQL語言中主要有三個標(biāo)準(zhǔn)的循環(huán)方式:LOOP、REPEAT和WHILE。①LOOP循環(huán)。語法格式:begin_label:LOOP [statement_list]; LEAVEbegin_label; [statement_list]; [ITERATEbegin_label;][statement_list];ENDLOOP[end_label];5.1SQL編程基礎(chǔ)5.1.1SQL語言基礎(chǔ)3.SQL流程控制語句【例7】計算1+2+3+…+n。通過IF語句判斷退出循環(huán)的條件,達到退出條件時使用LEAVE語句退出循環(huán)。DELIMITERCREATEPROCEDUREexample_loop(nint)BEGIN DECLAREsum,iINTDEFAULT0; loop_label:LOOP SETsum=sum+i; IFi=nTHEN LEAVEloop_label; ENDIF;SETi=i+1;5.1SQL編程基礎(chǔ)ENDLOOPloop_label;SELECTsum;END;DELIMITER;CALLexample_loop(100);5.1.1SQL語言基礎(chǔ)3.SQL流程控制語句②REPEAT循環(huán)。語法格式:begin_label:REPEAT[statement_list];LEAVEbegin_label; [statement_list];[ITERATEbegin_label;][statement_list];UNTILsearch_conditionENDREPEAT[end_label];5.1SQL編程基礎(chǔ)③WHILE循環(huán)。語法格式:begin_label:WHILEsearch_conditionDO [statement_list]; LEAVEbegin_label; [statement_list]; [ITERATEbegin_label;] [statement_list];ENDWHILE[end_label];5.1.1SQL語言基礎(chǔ)3.SQL流程控制語句【例8】使用WHILE循環(huán)計算1到n之間奇數(shù)的和。
DELIMITER//CREATEPROCEDUREexample_while(nint)BEGIN DECLAREsum,iINTDEFAULT0;while_label: whilei<nDO SETi=i+1; IFmod(i,2)=1THEN SETsum=sum+i; ENDIF; ENDwhile_label; SELECTsum;END; DELIMITER;CALLexample_while(10);5.1SQL編程基礎(chǔ)5.1.1SQL語言基礎(chǔ)4.條件和處理程序的定義(1)定義條件??梢允褂肈ECLARE語句定義條件。語法格式:DECLAREcondition_nameCONDITIONFORcondition_value(2)定義處理程序。語法格式:DECLAREhandler_typeHANDLERFORcondition_value[,condition_value]statement5.注釋(1)單行注釋。①在行前使用#。②在行前使用--(2)多行注釋。使用/??/注釋。5.1SQL編程基礎(chǔ)5.1.2常用函數(shù)1.字符串函數(shù)字符串函數(shù)用于控制字符串返回滿足用戶需求的位置,這些功能僅用于字符型數(shù)據(jù)。ASCII(char)、LENGTH(s)、CHAR_LENGTH(s)、CONCAT(s1,s2,...)、UPPER(s)、CONCAT_WS(sep,s1,s2,...)、INSERT(s1,x,len,s2)、LOWER(s)、LEFT(s,n)、TRIM(s)、RIGHT(s,n)等2.數(shù)學(xué)函數(shù)
常用的數(shù)學(xué)函數(shù)有:ABS(x)函數(shù)、FLOOR(x)函數(shù)、CEILING(x)函數(shù)、GREATEST()函數(shù)、LEAST()函數(shù)、ROUND(x)函數(shù)、TRUNCATE(x,y)函數(shù)、RAND()函數(shù)、RAND(x)函數(shù)、SQRT(x)函數(shù)、MOD(x,y)函數(shù)5.1SQL編程基礎(chǔ)5.1.2常用函數(shù)3.日期和時間函數(shù)
常用日期和時間函數(shù)的操作有:CURDATE()函數(shù)、CURTIME()函數(shù)、DATE_ADD()函數(shù)、DATE_SUB()函數(shù)、DAYOFWEEK(d)函數(shù)、DAYOFMONTH(d)函數(shù)、DAYOFYEAR(d)函數(shù)、HOUR(t)函數(shù)、MINUTE(t)函數(shù)、SECOND(t)函數(shù)、⑤NOW()函數(shù)、DATEDIFF()函數(shù)、4.系統(tǒng)函數(shù)
常用的系統(tǒng)函數(shù):DATABASE()函數(shù)、USER()函數(shù)、VERSION()函數(shù)、CHARSET(str)函數(shù)COLLATION(str)函數(shù)5.1SQL編程基礎(chǔ)5.1.3游標(biāo)1.聲明游標(biāo)在MariaDB中,游標(biāo)主要包括游標(biāo)結(jié)果集合和游標(biāo)位置兩部分。語法格式:DECLAREcursor_nameCURSORFORselect_statement;2.游標(biāo)操作(1)打開游標(biāo)。語法格式:OPENcursor_name;例如,打開先前定義的游標(biāo)course_cursor。OPENcourse_cursor;(2)檢索游標(biāo)。語法格式:FETCHcursor_nameINTOvar_name[,var_name,...];(3)關(guān)閉游標(biāo)關(guān)閉游標(biāo)的語法格式:CLOSEcursor_name;5.1SQL編程基礎(chǔ)5.2存儲過程和存儲函數(shù)
5.2.1熟悉存儲過程和存儲函數(shù)1.聲明游標(biāo)存儲過程是一組可以完成特定功能的SQL語句的集合,經(jīng)編譯后以一個名稱存儲在數(shù)據(jù)庫中。存儲函數(shù)是一個存儲的程序,用于接受參數(shù)并獲取該程序執(zhí)行后的返回值。存儲過程和存儲函數(shù)的優(yōu)缺點存儲過程和存儲函數(shù)的缺點。5.2存儲過程和存儲函數(shù)5.2.1熟悉存儲過程和存儲函數(shù)2.存儲過程和存儲函數(shù)參數(shù)存儲過程和存儲函數(shù)能接受輸入?yún)?shù),并把參數(shù)返回給調(diào)用方。參數(shù)傳遞信息的關(guān)鍵字5.2存儲過程和存儲函數(shù)5.2.2創(chuàng)建存儲過程和存儲函數(shù)1.創(chuàng)建存儲過程(1)使用CREATEPROCEDURE語句創(chuàng)建存儲過程,語法格式:CREATE[ORREPLACE][DEFINER={user|CURRENT_USER|role|CUR-RENT_ROLE}]PROCEDUREsp_name([proc_parameter[,...]])[characteristic...]routine_body使用ORREPLACE子句,判斷將要創(chuàng)建的存儲過程是否存在。DEFINER子句指定存儲過程執(zhí)行時,檢查權(quán)限所使用的上下文。sp_name參數(shù)表示創(chuàng)建的存儲過程的名稱proc_parameter允許使用空參數(shù)列表,如果給定了參數(shù),則參數(shù)名不區(qū)分大小寫。routine_body部分包含有效的SQL語句。5.2存儲過程和存儲函數(shù)5.2.2創(chuàng)建存儲過程和存儲函數(shù)1.創(chuàng)建存儲過程【例9】創(chuàng)建存儲過程。創(chuàng)建統(tǒng)計教學(xué)管理數(shù)據(jù)庫中學(xué)生信息表的學(xué)生數(shù)的簡單存儲過程,并使用OUT參數(shù)輸出學(xué)生人數(shù)。DELIMITER//CREATEPROCEDUREsp_student_num(OUTs_numINT)BEGIN
SELECTCOUNT(?)INTOs_numFROMteaching_management.student_in-fo;END;//DELIMITER;
CALLsp_student_num(@student_num);SELECT@student_num;5.2存儲過程和存儲函數(shù)5.2.2創(chuàng)建存儲過程和存儲函數(shù)2.創(chuàng)建存儲函數(shù)(1)使用CREATEFUNCTION語句創(chuàng)建存儲函數(shù)。使用CREATEFUNCTION語句,必須要具備CREATEROUTINE權(quán)限。語法格式:CREATE[ORREPLACE][DEFINER={user|CURRENT_USER|role|CUR-RENT_ROLE}][AGGREGATE]FUNCTION[IFNOTEXISTS]func_name([func_parameter[,...]])RETURNStype[characteristic...]RETURNfunc_body
5.2存儲過程和存儲函數(shù)5.2.2創(chuàng)建存儲過程和存儲函數(shù)2.創(chuàng)建存儲函數(shù)【例10】通過一個參數(shù)傳入值,執(zhí)行一個SQL內(nèi)置函數(shù)CONCAT(),返回一個新的字符串。DELIMITER//CREATEFUNCTIONteaching_management.func_string(sCHAR(20))
RETURNSCHAR(50)DETERMINISTIC
RETURNCONCAT(‘Hello,’,s,‘!’);//DELIMITER;SELECTfunc_string(‘world’);5.2存儲過程和存儲函數(shù)5.2.2創(chuàng)建存儲過程和存儲函數(shù)2.創(chuàng)建存儲函數(shù)【例11】創(chuàng)建一個計數(shù)器函數(shù),使用一個臨時表來存儲當(dāng)前的值??梢栽诤瘮?shù)內(nèi)部使用一個語句塊來操作數(shù)據(jù)(即使用DML),如INSERT語句和UPDATE語句。CREATETEMPORARYTABLEcounter(cINT);INSERTINTOcounterVALUES(0);DELIMITER//CREATEFUNCTIONfunc_counter()RETURNSINT
BEGIN
UPDATEcounterSETc=c+1;
RETURN(SELECTcFROMcounterLIMIT1);
END;//DELIMITER;SELECTfunc_counter();5.2存儲過程和存儲函數(shù)5.2.2創(chuàng)建存儲過程和存儲函數(shù)2.創(chuàng)建存儲函數(shù)(2)利用HeidiSQL圖形界面創(chuàng)建存儲函數(shù)。利用HeidiSQL圖形界面創(chuàng)建存儲函數(shù)的步驟與創(chuàng)建存儲過程相似。5.2存儲過程和存儲函數(shù)3.調(diào)用存儲過程和存儲函數(shù)存儲函數(shù)的調(diào)用與MariaDB內(nèi)部函數(shù)的調(diào)用方式相同。(1)在HeidiSQL圖形界面調(diào)用存儲過程和存儲函數(shù)。利用HeidiSQL圖形界面調(diào)用存儲過程和存儲函數(shù)的方法非常簡單。(2)使用SQL語句調(diào)用存儲過程和存儲函數(shù)。①調(diào)用存儲過程。語法格式:CALLsp_name([parameter[,...]]);②調(diào)用存儲函數(shù)。如:調(diào)用存儲函數(shù)func_teacher。SELECTfunc_teacher(‘T01’);5.2.3管理存儲過程和存儲函數(shù)1.查看存儲過程和存儲函數(shù)(1)利用SHOWSTATUS語句查看。語法格式:SHOW[PROCEDURE|FUNCTION]STATUS[LIKE‘pattern’];(2)利用SHOWCREATE語句查看。語法格式:SHOWCREATE[PROCEDURE|FUNCTION]<sp_name|func_name>;(3)從information_schema.ROUTINES數(shù)據(jù)表查看存儲過程或存儲函數(shù)的信息。SELECT?FROMinformation_schema.ROUTINES[WHEREROUTINE_NAME{=‘sp_name|func_name’|LIKE‘pattern’}];5.2存儲過程和存儲函數(shù)5.2.3管理存儲過程和存儲函數(shù)1.查看存儲過程和存儲函數(shù)【例12】查看存儲過程或存儲函數(shù)的操作。查看存儲過程sp_count_test的基本信息。SHOWPROCEDURESTATUSsp_count_test;查看存儲函數(shù)func_teacher_department的基本信息。SHOWCREATEFUNCTIONfunc_teacher_department;從information_schema.ROUTINES數(shù)據(jù)表查看存儲函數(shù)func_counter的信息。SELECT?FROMinformation_schema.ROUTINESWHEREROUTINE_NAME=‘func_counter’;5.2存儲過程和存儲函數(shù)5.2.3管理存儲過程和存儲函數(shù)2.修改存儲過程和存儲函數(shù)語法格式:ALTER[PROCEDURE|FUNCTION]<sp_name|func_name>[characteristic...];【例13】修改存儲過程或存儲函數(shù)的操作。查詢information_schema.ROUTINES數(shù)據(jù)表中存儲過程sp_count_test的信息。SELECTSPECIFIC_NAME,SQL_DATA_ACCESS,SECURITY_TYPEFROMinfor-mation_schema.ROUTINESWHEREROUTINE_NAME=‘sp_count_test’;sp_count_test(‘S01’);修改存儲過程sp_count_test。ALTERPROCEDUREsp_count_testModifiesSQLdataSQLSECURITYIN-VOKER;5.2存儲過程和存儲函數(shù)5.2.3管理存儲過程和存儲函數(shù)3.刪除存儲過程和存儲函數(shù)使用DROP語句可以刪除存儲過程或存儲函數(shù),語法格式:DROP[PROCEDURE|FUNCTION][IFEXISTS]<sp_name|func_name>;例如,刪除存儲過程sp_count_test的語法格式:DROPPROCEDUREIFEXISTSsp_count_test;5.2存儲過程和存儲函數(shù)5.3觸發(fā)器、事務(wù)和鎖
5.3.1觸發(fā)器1.創(chuàng)建觸發(fā)器觸發(fā)器(Trigger)是特殊的存儲過程,它基于一個數(shù)據(jù)表創(chuàng)建。(1)利用SQL語句創(chuàng)建觸發(fā)器。語法格式:CREATE[ORREPLACE][DEFINER={user|CURRENT_USER|role|CUR-RENT_ROLE}]TRIGGER[IFNOTEXISTS]trigger_nametrigger_timetrigger_eventONtbl_nameFOREACHROW[{FOLLOWS|PRECEDES}other_trigger_name]trigger_stmt5.3觸發(fā)器、事務(wù)和鎖5.3.1觸發(fā)器1.創(chuàng)建觸發(fā)器【例14】觸發(fā)器的創(chuàng)建操作。在teaching_management數(shù)據(jù)庫中創(chuàng)建一個INSERT觸發(fā)器tr_class_num。USEteaching_management;DELIMITER//CREATEDEFINER=`root`@`localhost`TRIGGERtr_class_num
AFTERINSERTONstudent_infoFOREACHROW
BEGIN
UPDATEclass_infoSETnumber=number+1WHEREno=NEW.class_no;
END;//DELIMITER;5.3觸發(fā)器、事務(wù)和鎖5.3.1觸發(fā)器1.創(chuàng)建觸發(fā)器(2)利用HeidiSQL圖形界面創(chuàng)建觸發(fā)器?!纠?5】創(chuàng)建一個觸發(fā)器tr_update_sno,當(dāng)student_info數(shù)據(jù)表中學(xué)生的學(xué)號發(fā)生變更時,同時更新student_course數(shù)據(jù)表中相應(yīng)的學(xué)生的學(xué)號。5.3觸發(fā)器、事務(wù)和鎖5.3.1觸發(fā)器2.管理觸發(fā)器(1)查看觸發(fā)器。①用SHOWTRIGGERS語句查看觸發(fā)器信息。語法格式:SHOWTRIGGERS;②在information_schema.TRIGGERS數(shù)據(jù)表中查看觸發(fā)器的信息。(2)刪除觸發(fā)器。語法格式:DROPTRIGGER[db_name.]trigger_name;如:刪除觸發(fā)器tr_update_sno。DROPTRIGGERteaching_management.tr_update_sno;(3)利用HeidiSQL圖形界面管理觸發(fā)器。5.3觸發(fā)器、事務(wù)和鎖5.3.2事務(wù)1.事務(wù)的特性事務(wù)是由有限的數(shù)據(jù)庫操作序列組成的,但并不是任意的數(shù)據(jù)庫操作序列都能成為事務(wù),作為一個邏輯工作單元,必須有4個屬性,即原子性(Atomicity)、一致性(Consistency)、隔離性(Isolation)及持久性(Durability),簡稱事務(wù)的ACID特性。2.事務(wù)分類
扁平事務(wù)、帶有保存點的扁平事務(wù)、鏈?zhǔn)绞聞?wù)、嵌套事務(wù)、分布式事務(wù)。3.事務(wù)控制事務(wù)控制包括開始事務(wù)、提交事務(wù)、回滾事務(wù)等操作。5.3觸發(fā)器、事務(wù)和鎖5.3.2事務(wù)【例16】修改教學(xué)管理系統(tǒng)中學(xué)生所在班級的班級號,成功則提交事務(wù),否則回滾事務(wù)。DELIMITER//CREATEPROCEDUREsp_student_class()BEGIN
DECLAREl_noCHAR(3);
STARTTRANSACTION;UPDATEteaching_management.student_infoSETclass_no=‘L23’WHEREno=‘T01’;SELECTclass_noINTOl_noFROMteaching_management.student_infoWHEREno=‘T01’;IFl_no=‘L23’THEN
BEGIN5.3觸發(fā)器、事務(wù)和鎖5.3.2事務(wù)
SELECT‘修改成功,提交事務(wù)!’;
COMMIT;
END;
ELSE
BEGIN
SELECT‘修改失敗,回滾事務(wù)!’;
ROLLBACK;
END;
ENDIF;
END;//DELIMITER;callsp_student_class;5.3觸發(fā)器、事務(wù)和鎖5.3.3鎖使用事務(wù)可以解決用戶存取數(shù)據(jù)的問題,從而保證數(shù)據(jù)庫的完整性和一致性,為防止其他用戶修改另一個還沒有完成的事務(wù)中的數(shù)據(jù),就必須在事務(wù)中使用鎖。1.并發(fā)操作引起的問題(1)丟失更新;(2)臟讀;
(3)不可重復(fù)讀;(4)幻象讀2.事務(wù)隔離級別 四個隔離級別的特性5.3觸發(fā)器、事務(wù)和鎖5.3.3鎖3.鎖機制(1)表級鎖定。①讀鎖
MariaDB中用于READ(讀)的表級鎖定的實現(xiàn)機制。②寫鎖MariaDB中用于WRITE(寫)的表級鎖定的實現(xiàn)機制。LOCKTABLES語句可實現(xiàn)表級鎖的鎖定,鎖數(shù)據(jù)表的時候可以使用不同的鎖一次性鎖定多張數(shù)據(jù)表,而解鎖的時候只能一次性解鎖當(dāng)前客戶端會話的所有數(shù)據(jù)表。語法格式:LOCKTABLEStb_name[[AS]alias]lock_type[,tb_name[[AS]alias]lock_type]...;5.3觸發(fā)器、事務(wù)和鎖5.3.3鎖3.鎖機制【例17】加鎖操作。在test數(shù)據(jù)庫中創(chuàng)建練習(xí)用的t1、t2數(shù)據(jù)表,并插入測試數(shù)據(jù)。USEtest;DROPTABLEIFEXISTSt1,t2;CREATETABLEt1(aINT,bCHAR(5))ENGINE=MYISAM;CREATETAB
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 貴州警察學(xué)院《石油鉆采機械》2023-2024學(xué)年第二學(xué)期期末試卷
- 四川長江職業(yè)學(xué)院《新媒體運營》2023-2024學(xué)年第二學(xué)期期末試卷
- 江蘇省淮安市盱眙中學(xué)2024-2025學(xué)年高考物理試題全真模擬密押卷(一)含解析
- 福建幼兒師范高等??茖W(xué)?!洞髷?shù)據(jù)原理與應(yīng)用實踐》2023-2024學(xué)年第二學(xué)期期末試卷
- 漯河食品職業(yè)學(xué)院《翻譯理論與實踐(二)》2023-2024學(xué)年第二學(xué)期期末試卷
- 河北政法職業(yè)學(xué)院《工程力學(xué)(含材料力學(xué))》2023-2024學(xué)年第二學(xué)期期末試卷
- 四川職業(yè)技術(shù)學(xué)院《眼耳鼻喉口腔科學(xué)》2023-2024學(xué)年第二學(xué)期期末試卷
- 河北師范大學(xué)《風(fēng)險理論》2023-2024學(xué)年第二學(xué)期期末試卷
- 天津渤海職業(yè)技術(shù)學(xué)院《混凝土結(jié)構(gòu)基本原理及設(shè)計》2023-2024學(xué)年第二學(xué)期期末試卷
- 上海海關(guān)學(xué)院《Flash動畫設(shè)計》2023-2024學(xué)年第二學(xué)期期末試卷
- DB43∕T 571-2010 安化黑茶 湘尖茶
- 《檢驗檢測機構(gòu)監(jiān)督管理辦法》培訓(xùn)結(jié)業(yè)考核試題附答案
- 基于SolidWorks球閥參數(shù)化設(shè)計
- 初中綜合實踐課程標(biāo)準(zhǔn)
- 基于STC89C52單片機-紅外智能循跡小車
- 重慶森林工程林業(yè)項目營造林檢查驗收辦法(試行)
- 市政工程施工質(zhì)量檢查表
- 懸臂模板多卡模板施工手冊
- 土及部分巖石力學(xué)參數(shù)經(jīng)驗值
- 國內(nèi)外硅鋼片牌號
- 談文旅融合發(fā)展的深層意義
評論
0/150
提交評論