版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
DatabaseTechnology&Applications數(shù)據(jù)庫技術(shù)及應(yīng)用數(shù)據(jù)庫完整性實施數(shù)據(jù)完整性的必要性正確性(correctness)數(shù)據(jù)語法的正確性如數(shù)值型數(shù)據(jù)中只能含有數(shù)字而不能含有字母有效性(valid)數(shù)據(jù)是否屬于所定義域的有效范圍如年齡不能是負(fù)數(shù),在0到150之間。相容性(consistency)同一事實的兩個數(shù)據(jù)應(yīng)當(dāng)一致如數(shù)據(jù)庫中同時有年齡和出生年份這兩個數(shù)據(jù),則年齡應(yīng)該等于當(dāng)前年份-出生年份防止各類錯誤數(shù)據(jù)進(jìn)入數(shù)據(jù)庫!DBMS完整性控制的功能定義提供完整性約束條件的定義機制,確定要遵從的數(shù)據(jù)規(guī)則檢查檢查用戶發(fā)出的操作請求是否違背完整性約束條件處理如果發(fā)現(xiàn)用戶操作請求與完整性約束條件不符,需要采取一定的動作實體完整性規(guī)則的定義通過定義或者修改表結(jié)構(gòu)的時候定義PRIMARYKEY來實現(xiàn)。定義PRIMARYKEY的子句在CREATETABLE命令中的格式為:PRIMARYKEY(<列名序列>);//一個關(guān)系只能有一個PRIMARYKEY,鍵值非空且唯一實體完整性約束控制的實現(xiàn)【例8.1】新建學(xué)生S表(學(xué)號,姓名,年齡,身份證號),并定義實體完整性。CREATETABLES(SNOCHAR(8)PRIMARYKEY,/*在屬性列級別上定義主鍵*/SNameCHAR(10),Sageint,SecurityNOCHAR(18));實體完整性約束控制的實現(xiàn)【例8.1】新建學(xué)生S表(學(xué)號,姓名,年齡,身份證號),并定義實體完整性。CREATETABLES(SNOCHAR(8),SNameCHAR(10),Sageint,SecurityNOCHAR(18),PRIMARYKEY(SNO));/*在關(guān)系級別上定義主鍵*/實體完整性約束控制的實現(xiàn)【例8.2】新建課程C表(課程號,課程名,學(xué)分),并定義實體完整性。CREATETABLEC(CNOCHAR(8),CNameCHAR(10),HourNUMERIC(3),PRIMARYKEY(CNO));/*在關(guān)系級別上定義主鍵*/實體完整性約束控制的實現(xiàn)【例8.3】數(shù)據(jù)插入違反實體完整性而失敗的例子往S表插入兩條數(shù)據(jù):INSERTINTOSVALUES('S001','小明',19,’200006’);/*插入成功*/INSERTINTOSVALUES('S001','小紅',20,’300456’);/*插入失敗*/INSERTINTOSVALUES('S002','小紅',20,’300456’);/*插入成功*/UPDATESSETSNO='S001'WHERESNAME='小紅'/*更新失敗*/同樣學(xué)號的記錄已存在同樣學(xué)號的記錄已存在參照完整性規(guī)則的定義參照完整性(外鍵)定義的子句在CREATETABLE命令中一般格式為:FOREIGNKEY(<列名序列>)REFERENCES關(guān)系名<目標(biāo)關(guān)系名>|(<列名序列>)
[ONDELETE<ACTION>][ONUPDATE<ACTION>]違反參照完整性的處理方法操作對象相關(guān)操作INSERTDELETEUPDATE
被參照表不需要檢查根據(jù)參照表中外鍵定義的ONDELETE…(用戶顯示定義的方式,提供四種:CASCADE、NOACTION
、SETNULL和SETDEFAULT(系統(tǒng)默認(rèn)的方式NOACTION)根據(jù)參照表中外鍵定義的ONUPDATE…(用戶顯示定義的方式,提供四種:CASCADE、NOACTION、SETNULL和SETDEFAULT(系統(tǒng)默認(rèn)的方式NOACTION)參照表違反則拒絕執(zhí)行不需要檢查違反則拒絕執(zhí)行參照完整性約束控制的實現(xiàn)【例8.4】新建選修SC表(學(xué)號,課程號,成績),并定義實體完整性和參照完整性。建立選修SC表(SNO,CNO,Grade)并定義主鍵和建立參照關(guān)系:CREATETABLESC(SNOCHAR(8),CNOCHAR(10),GradeNUMERIC(3),PRIMARYKEY(SNO,CNO),FOREIGNKEY(SNO)REFERENCESS(SNO)ONDELETECASCADE,FOREIGNKEY(CNO)REFERENCESC(CNO)ONUPDATENOACTION);參照完整性約束控制的實現(xiàn)【例8.4】新建選修SC表(學(xué)號,課程號,成績),并定義實體完整性和參照完整性。(1)往表中插入以下數(shù)據(jù)數(shù)據(jù):INSERTINTOSVALUES('A001','李紅',18);INSERTINTOSVALUES('A003','陳誠',18);INSERTINTOCVALUES('C001','C語言');INSERTINTOSCVALUES('A001','C001',95);INSERTINTOSCVALUES('A003','C001',85);參照完整性約束控制的實現(xiàn)【例8.4】新建選修SC表(學(xué)號,課程號,成績),并定義實體完整性和參照完整性。(2)往SC表(參照關(guān)系)中插入數(shù)據(jù):INSERTINTOSCVALUES('A001','C002',95);由于C表(被參照關(guān)系)中無課程C002,違反了參照完整性,所以C表的更新操作失敗,系統(tǒng)拒絕插入。參照完整性約束控制的實現(xiàn)【例8.4】新建選修SC表(學(xué)號,課程號,成績),并定義實體完整性和參照完整性。(3)更新SC表(參照關(guān)系)中學(xué)號為“A001”,課程號為“C001”的記錄:UPDATESCSETSNO='A002'WHERESNO='A001'ANDCNO='C001';由于S表中無學(xué)生“A002”,所以SC表的更新操作失敗,系統(tǒng)拒絕更新。參照完整性約束控制的實現(xiàn)【例8.4】新建選修SC表(學(xué)號,課程號,成績),并定義實體完整性和參照完整性。(4)更新S表(被參照關(guān)系)中學(xué)號為“A001”的記錄:UPDATESSETSNO='A002'WHERESNO='A001';在S表更新學(xué)生“A001”的學(xué)號時,在SC表中還存在著學(xué)生“A001”的選課信息,由于沒有定義外鍵SNO的更新操作,ONUPDATE子句默認(rèn)為NOACTION,故系統(tǒng)拒絕更新。參照完整性約束控制的實現(xiàn)【例8.4】新建選修SC表(學(xué)號,課程號,成績),并定義實體完整性和參照完整性。(5)更新C表(被參照關(guān)系)中課程號為“C001”的記錄:UPDATECSETCNO='C002'WHERECNO='C001';在C表更新課程“C001”時,在SC表中還存在著課程“C001”的選課信息,且ONUPDATE子句中定義的是NOACTION,故系統(tǒng)拒絕更新。參照完整性約束控制的實現(xiàn)【例8.4】新建選修SC表(學(xué)號,課程號,成績),并定義實體完整性和參照完整性。(6)刪除S表(被參照關(guān)系)中學(xué)號為“A001”的記錄:DELETEFROMSWHERESNO='A001';在S表中刪除學(xué)生“A001”時,在SC表中還存在著學(xué)生“A001”的信息,所以S表的刪除操作違反了參照完整性。由于定義了外鍵SNO的刪除操作為CASCADE,所以系統(tǒng)除了刪除S表中學(xué)生“A001”的記錄之外,還會刪除SC表中學(xué)生“A001”選修的記錄。參照完整性約束控制的實現(xiàn)【例8.4】新建選修SC表(學(xué)號,課程號,成績),并定義實體完整性和參照完整性。(7)刪除C表(被參照關(guān)系)中課程號為“C001”的記錄:DELETEFROMCWHERECNO='C001';在C表刪除課程“C001”時,在SC表中還存在著課程“C001”的信息,所以C表的刪除操作違反了參照完整性。由于沒有定義外鍵CNO上的刪除操作,故默認(rèn)為ONDELETENOACTION,所以系統(tǒng)拒絕刪除課程表記錄。用戶自定義完整性約束NOTNULL非空DEFAULT
默認(rèn)值UNIQUE
唯一值CHECK
滿足表達(dá)式的取值用戶自定義完整性約束【例8.5】DEFAULT約束使用實例CREATETABLEEMPL(DnoNUMERIC(2),/*Dno為部門號*/EnoCHAR(8)UNIQUENOTNULL,/*屬性Eno取值唯一,而且不能為空*/SalaryNUMERIC(10)DEFAULT8000);/*屬性Salary具默認(rèn)值約束*/用戶自定義完整性約束【例8.6】UNIQUE約束使用實例CREATETABLEDEPT(DEPNONUMERIC(2),DnameCHAR(8)UNIQUENOTNULL,/*Dname為候選鍵*/LocationCHAR(10),PRIMARYKEY(DEPNO));/*在關(guān)系級別上定義主鍵*/用戶自定義完整性約束【例8.7】CHECK約束使用實例——在S表關(guān)系中限定Gender只能取“male”或“female”:ALTERTABLESADDCOLUMNGenderCHAR(1)CHECK(GenderIN('M','F'));用戶自定義完整性約束【例8.8】CHECK約束使用實例——在S表中加入CHECK約束S1——限制學(xué)生年齡為18到25歲:ALTERTABLESADDCONSTRAINTS1CHECK(SageBETWEEN18AND25);數(shù)據(jù)庫安全性保護(hù)安全性控制的一般模型安全性保護(hù)的措施用戶身份鑒別基于訪問控制技術(shù)審計技術(shù)用戶身份鑒別【例8.9】在EMS數(shù)據(jù)庫內(nèi),添加、修改和刪除用戶的例子(1)創(chuàng)建用戶student1,密碼是student@123:CREATEUSERstudent1WITHPASSWORD"student@123";用戶身份鑒別【例8.9】在EMS數(shù)據(jù)庫內(nèi),添加、修改和刪除用戶的例子(2)將用戶student1的登錄密碼由student@123修改為abcd@123:ALTERUSERstudent1IDENTIFIEDBY'abcd@123'REPLACE'student@123';是系統(tǒng)提供的最外層安全保護(hù)措施,其方法是每個用戶在系統(tǒng)中必須有一個標(biāo)志自己身份的標(biāo)識符,用以和其它用戶相區(qū)別。用戶身份鑒別【例8.9】在EMS數(shù)據(jù)庫內(nèi),添加、修改和刪除用戶的例子(3)使用視圖PG_USER來查看當(dāng)前系統(tǒng)中的用戶列表:SELECT*FROMpg_user;用戶身份鑒別【例8.9】在EMS數(shù)據(jù)庫內(nèi),添加、修改和刪除用戶的例子(4)刪除用戶student1:DROPUSERstudent1CASCADE;基于訪問控制技術(shù)訪問控制(accesscontrol)就是一個數(shù)據(jù)庫用戶訪問數(shù)據(jù)庫資源權(quán)限的一種規(guī)定和管理。是數(shù)據(jù)庫安全保護(hù)的主體技術(shù)。數(shù)據(jù)庫用戶類型角色機制授權(quán)回收數(shù)據(jù)庫用戶類型數(shù)據(jù)庫用戶管理員用戶初始用戶系統(tǒng)管理員普通用戶數(shù)據(jù)庫用戶管理【例8.10】添加各類用戶的例子(1)在EMS數(shù)據(jù)庫內(nèi),創(chuàng)建系統(tǒng)管理員用戶admin,密碼為admin@123:CREATEUSERadminWITHSYSADMINPASSWORD"admin@123";數(shù)據(jù)庫用戶管理【例8.10】添加各類用戶的例子(2)創(chuàng)建普通用戶student1,密碼是student1@123:CREATEUSERstudent1WITHPASSWORD"student1@123";數(shù)據(jù)庫用戶管理【例8.10】添加各類用戶的例子(3)創(chuàng)建安全管理員security1,密碼是security1@123:CREATEUSERsecurity1WITHCREATEROLEPASSWORD"security1@123";數(shù)據(jù)庫用戶管理【例8.10】添加各類用戶的例子(4)使用視圖pg_user來查看當(dāng)前系統(tǒng)中的用戶列表:SELECT*FROMpg_user;數(shù)據(jù)庫用戶管理【例8.10】添加各類用戶的例子(5)使用視圖pg_roles來查看當(dāng)前系統(tǒng)中的角色列表:SELECT*FROMpg_roles;數(shù)據(jù)庫用戶管理【例8.10】添加各類用戶的例子(6)使用系統(tǒng)表pg_authid來查看用戶屬性:SELECT*FROMpg_authidWHERErolsystemadmin='t’;/*該用戶是管理員用戶*/SELECT*FROMpg_authidWHERErolcreaterole='t’;/*該用戶擁有創(chuàng)建角色權(quán)限*/數(shù)據(jù)庫用戶管理(7)刪除student1用戶:DROPUSERstudent1;角色機制角色(Role)是一類具有相同數(shù)據(jù)權(quán)限的用戶(User)的集合。角色機制角色創(chuàng)建:GRANTROLE<角色名>;角色授權(quán):GRANT<權(quán)限>[,<權(quán)限>]…ON<數(shù)據(jù)對象類型><數(shù)據(jù)對象名>TO<角色名>[,<角色>]…角色機制將角色授予其它用戶:GRANT<角色名>[,<角色>]…TO<用戶名>[,<用戶名>]…[WITHGRANTOPTION];將角色授予其它角色:GRANT<角色名1>TO<角色名2>;角色機制角色收回:REVOKE<權(quán)限>[,<權(quán)限>]…ON<數(shù)據(jù)對象類型><數(shù)據(jù)對象名>FROM<角色名>[,<角色>]…角色機制授權(quán)語句:GRANT{<權(quán)限1>,<權(quán)限2>…|ALL}[ON<數(shù)據(jù)對象類型><數(shù)據(jù)對象名>]TO{<用戶/角色>[,用戶/角色]…|PUBLIC}[WITHGRANTOPTION]/*表示獲得權(quán)限的用戶可以將其獲得的權(quán)限繼續(xù)授權(quán)給其它用戶*/授權(quán)語句【例8.11】使用角色機制完成將權(quán)限授予用戶,由此可以看到角色機制可以使自主授權(quán)的執(zhí)行更加方便和靈活。(1)創(chuàng)建老師角色Teacher,密碼為teacher@123;創(chuàng)建學(xué)生用戶Raul,密碼為raul@123;創(chuàng)建學(xué)生用戶White,密碼為white@123;創(chuàng)建學(xué)生用戶Mary,密碼為mary@123:CREATEROLETeacherWITHPASSWORD"teacher@123";CREATEUSERRaulWITHPASSWORD"raul@123";CREATEUSERWhiteWITHPASSWORD"white@123";CREATEUSERMaryWITHPASSWORD"mary@123";授權(quán)語句【例8.11】使用角色機制完成將權(quán)限授予用戶,由此可以看到角色機制可以使自主授權(quán)的執(zhí)行更加方便和靈活。(2)將對“學(xué)生”表的查詢、更新和插入權(quán)授予角色Teacher:GRANTSELECT,UPDATE,INSERTONTABLE學(xué)生TOTeacher;授權(quán)語句【例8.11】使用角色機制完成將權(quán)限授予用戶,由此可以看到角色機制可以使自主授權(quán)的執(zhí)行更加方便和靈活。(3)將具有上述權(quán)限的角色授予Raul,White和Mary:GRANTTeacherTORaul,White,Mary;授權(quán)語句【例8.11】使用角色機制完成將權(quán)限授予用戶,由此可以看到角色機制可以使自主授權(quán)的執(zhí)行更加方便和靈活。(4)將Teacher賦予White的權(quán)限收回:REVOKETeacherFROMWhite;授權(quán)語句【例8.11】使用角色機制完成將權(quán)限授予用戶,由此可以看到角色機制可以使自主授權(quán)的執(zhí)行更加方便和靈活。(5)增加Teacher在“學(xué)生”表上的DELETE權(quán)限:GRANTDELETEONTABLE學(xué)生TOTeacher;授權(quán)語句【例8.11】使用角色機制完成將權(quán)限授予用戶,由此可以看到角色機制可以使自主授權(quán)的執(zhí)行更加方便和靈活。(6)收回Teacher在“學(xué)生”表上的UPDATE權(quán)限:REVOKEUPDATEONTABLE學(xué)生FROMTeacher;授權(quán)語句【例8.12】將“學(xué)生”表的SELECT權(quán)力和對其中學(xué)號的UPDATE權(quán)授予用戶Tom,Lily:(1)創(chuàng)建用戶Tom,Lily:CREATEUSERTomWITHPASSWORD"Tom@1234";CREATEUSERLilyWITHPASSWORD"Lily@1234";授權(quán)語句【例8.12】將“學(xué)生”表的SELECT權(quán)力和對其中學(xué)號的UPDATE權(quán)授予用戶Tom,Lily:(2)此時查看系統(tǒng)角色表,發(fā)現(xiàn)存在Tom、Lily,說明創(chuàng)建用戶時系統(tǒng)自動了創(chuàng)建同名角色:SELECTrolnameFROMpg_roles;授權(quán)語句【例8.12】將“學(xué)生”表的SELECT權(quán)力和對其中學(xué)號的UPDATE權(quán)授予用戶Tom,Lily:(3)將“學(xué)生”表的SELECT權(quán)和學(xué)號的UPDATE權(quán)授予用戶Tom:GRANTSELECT,UPDATE(學(xué)號)ONTABLE學(xué)生TOTomWITHGRANTOPTION;授權(quán)語句【例8.12】將“學(xué)生”表的SELECT權(quán)力和對其中學(xué)號的UPDATE權(quán)授予用戶Tom,Lily:(4)以用戶Tom的身份登錄系統(tǒng),即新建一個連接,用戶名為Tom,右圖,將權(quán)限授予Lily:GRANTSELECT,UPDATE(學(xué)號)ONTABLE學(xué)生TOLily;授權(quán)語句【例8.12】將“學(xué)生”表的SELECT權(quán)力和對其中學(xué)號的UPDATE權(quán)授予用戶Tom,Lily:(5)由于DBMS在創(chuàng)建用戶的時候,也同時創(chuàng)建了Tom,Lily的同名角色,實際上我們也可以直接在第(3)步之后用GRANTTomTOLily;授權(quán)語句【例8.13】將“學(xué)生”表的INSERT,UPDATE權(quán)限授予角色Teacher3,同時允許Teacher3將這兩個權(quán)限再授予角色Teacher4:(1)創(chuàng)建不帶有LOGIN屬性的組角色Teacher3,帶有LOGIN屬性的登錄角色Teacher4:CREATEROLETeacher3WITHPASSWORD"teacher3@123";CREATEROLETeacher4WITHPASSWORD"teacher4@123"LOGIN;授權(quán)語句【例8.13】將“學(xué)生”表的INSERT,UPDATE權(quán)限授予角色Teacher3,同時允許Teacher3將這兩個權(quán)限再授予角色Teacher4:(2)查看系統(tǒng)用戶表,SELECTusenameFROMpg_user;發(fā)現(xiàn)只存在Teacher4,這是因為創(chuàng)建角色Teacher3時沒有分配LOGIN權(quán)限,所以沒有創(chuàng)建同名用戶。授權(quán)語句【例8.13】將“學(xué)生”表的INSERT,UPDATE權(quán)限授予角色Teacher3,同時允許Teacher3將這兩個權(quán)限再授予角色Teacher4:(3)將“學(xué)生”表的INSERT,UPDATE權(quán)限授予用戶Teacher3:GRANTINSERT,UPDATEONTABLE學(xué)生TOTeacher3WITHGRANTOPTION;授權(quán)語句【例8.13】將“學(xué)生”表的INSERT,UPDATE權(quán)限授予角色Teacher3,同時允許Teacher3將這兩個權(quán)限再授予角色Teacher4:(4)將角色Teacher3的權(quán)限轉(zhuǎn)授給角色Teacher4:GRANTTeacher3TOTeacher4;授權(quán)語句【例8.13】將“學(xué)生”表的INSERT,UPDATE權(quán)限授予角色Teacher3,同時允許Teacher3將這兩個權(quán)限再授予角色Teacher4:(4)將角色Teacher3的權(quán)限轉(zhuǎn)授給角色Teacher4:GRANTTeacher3TOTeacher4;授權(quán)語句【例8.13】將“學(xué)生”表的INSERT,UPDATE權(quán)限授予角色Teacher3,同時允許Teacher3將這兩個權(quán)限再授予角色Teacher4:(5)打開客戶端DockerDesktop,按下CLI按鈕,打開openGauss數(shù)據(jù)庫的命令行界面;輸入su命令切換到omm用戶,輸入gsql命令切換到數(shù)據(jù)庫EMS:輸入\du命令,可看到角色Teacher4屬于組角色Teacher3回收語句用戶A將某權(quán)限授予用戶B,則用戶A也可以在它認(rèn)為必要時將權(quán)限從B中回收,收回權(quán)限的語句稱為回收語句,其具體形式如下:REVOKE{|<權(quán)限>ALL}[ON<數(shù)據(jù)對象類型><數(shù)據(jù)對象名>]FROM{<用戶1>,<用戶2>,…|PUBLIC}[CASCADE|RESTRICT];/*CASCADE表示回收權(quán)限時會引起級聯(lián)(連鎖)回收,而RESTRICT則關(guān)系式不存在連鎖回收時才能收回權(quán)限,否則拒絕回收。*/授權(quán)語句【例8.14】回收權(quán)限(1)從組角色Teacher3手中收回“學(xué)生”表上的插入和修改權(quán),并且是級聯(lián)收回。REVOKEINSERT,UPDATEONTABLE學(xué)生FROMTeacher3CASCADE;授權(quán)語句【例8.14】回收權(quán)限(2)從用戶Lily手上收回用戶Tom賦予的權(quán)限。REVOKETomFROMLily;審計(audit)技術(shù)操作類型,如查、增、刪、改操作終端標(biāo)識和操作用戶標(biāo)識操作日期和時間操作對象,如基本表、視圖、元組或?qū)傩灾祵⒂糜诎踩康牡臄?shù)據(jù)庫日志稱為審計追蹤(audittrail)審計追蹤依賴于對數(shù)據(jù)庫進(jìn)行更新(插入、刪除和修改)的日志,它主要包括下述內(nèi)容:事務(wù)與事務(wù)管理數(shù)據(jù)庫管理的重要課題如何保證數(shù)據(jù)庫操作的并發(fā)執(zhí)行的正確性如何保證數(shù)據(jù)庫在系統(tǒng)發(fā)生故障時能從故障中恢復(fù)事務(wù)的概念例如:A賬戶給B賬戶轉(zhuǎn)賬,金額為N元。這個事務(wù)包含兩個動作:
A賬戶-N B賬戶+N思考:若這個事務(wù)執(zhí)行了一半會怎樣???事務(wù)(Transaction)是DBMS的基本執(zhí)行單位之一,事務(wù)是由用戶定義的一個數(shù)據(jù)操作的有限序列,這個操作序列具有“要么全做,要么全不做”(allornothing)的特性。解決多用戶共享數(shù)據(jù)導(dǎo)致的數(shù)據(jù)異常情況事務(wù)短事務(wù)一條更新(插入、刪除或修改)的操作語句。長事務(wù)對數(shù)據(jù)庫進(jìn)行一系列操作的一個完整的用戶程序,通常是一組SQL語句的序列。SQL事務(wù)機制⑴事務(wù)開始語句:BEGINTRANSACTION⑵事務(wù)提交語句:COMMIT[TRANSACTION]⑶事務(wù)回滾語句:ROLLBACK[TRANSACTION]授權(quán)語句【例8.15】新建銀行數(shù)據(jù)庫和對應(yīng)的“賬戶”表,模擬兩個賬戶轉(zhuǎn)賬,轉(zhuǎn)賬失敗則事務(wù)回滾。(1)新建銀行數(shù)據(jù)庫,并在銀行數(shù)據(jù)庫中新建“賬戶”表:CREATEDATABASEBANK;CREATETABLE賬戶(
銀行卡號VARCHAR(23)PRIMARYKEY,
身份證號VARCHAR(18)UNIQUENOTNULL,
姓名VARCHAR(12)NOTNULL,
余額NUMERICNOTNULLCHECK(余額>=0));授權(quán)語句【例8.15】新建銀行數(shù)據(jù)庫和對應(yīng)的“賬戶”表,模擬兩個賬戶轉(zhuǎn)賬,轉(zhuǎn)賬失敗則事務(wù)回滾。(1)插入相關(guān)信息:INSERTINTO賬戶VALUES('6217001820020000000',,'李紅',2500.5);INSERTINTO賬戶VALUES('6217001820020000001',,'劉佳',4001);INSERTINTO賬戶VALUES('6217001820020000002',,'高興',1400);授權(quán)語句【例8.15】新建銀行數(shù)據(jù)庫和對應(yīng)的“賬戶”表,模擬兩個賬戶轉(zhuǎn)賬,轉(zhuǎn)賬失敗則事務(wù)回滾。(2)李紅轉(zhuǎn)賬給一個不存在的銀行賬號,轉(zhuǎn)賬失敗,事務(wù)回滾:DO$$BEGIN UPDATE賬戶SET余額=余額-1000WHERE銀行卡號='6217001820020000000'; IFEXISTS(SELECT1FROM賬戶WHERE銀行卡號='6217001820020000003')THEN UPDATE賬戶SET余額=余額+1000WHERE銀行卡號='6217001820020000003'; ELSE ROLLBACK; ENDIF;END$$;事務(wù)的性質(zhì)原子性(Atomicity):一個事務(wù)中的所有操作要么全執(zhí)行,要么全不做,是一個不可分割的整體。一致性(Consistency):事務(wù)執(zhí)行應(yīng)當(dāng)使得數(shù)據(jù)庫由一種一致性狀態(tài)遷移到另一種新的一致性狀態(tài)。隔離性(Isolation):在多事務(wù)并發(fā)執(zhí)行的結(jié)果如同在單用戶環(huán)境下逐一執(zhí)行事務(wù)的結(jié)果一致。持久性(Durability):對一個已經(jīng)提交的事務(wù),事務(wù)對數(shù)據(jù)庫的更新應(yīng)永久地保存。串行與并發(fā)執(zhí)行串行并發(fā)執(zhí)行同時并發(fā)執(zhí)行(多CPU)交叉或分時并發(fā)執(zhí)行(單CPU)并發(fā)引起的不一致問題——丟失更新丟失更新(LostUpdate)是指兩個事務(wù)T1和T2從數(shù)據(jù)庫讀取同一數(shù)據(jù)并進(jìn)行更新,事務(wù)T2提交的更新結(jié)果破壞了事務(wù)T1提交的更新結(jié)果,導(dǎo)致了事務(wù)T1的更新被丟失。又稱為寫-寫沖突(Write-WriteConflict)。并發(fā)引起的不一致問題——讀“臟”數(shù)據(jù)讀“臟”數(shù)據(jù)是由于一個事務(wù)讀取了另一個事務(wù)尚未提交的數(shù)據(jù)所引起,因而稱之為讀-寫沖突(read-writeconflict)。并發(fā)引起的不一致問題——不可重復(fù)讀取不可重復(fù)讀(Non-repeatableRead)是指當(dāng)事務(wù)T1讀取數(shù)據(jù)a的值為a’后,事務(wù)T2也對a進(jìn)行讀更新得到a’’,當(dāng)T1再讀取a進(jìn)行校驗時,發(fā)現(xiàn)前后兩次讀取值發(fā)生了變化,導(dǎo)致校驗失敗。封鎖封鎖的類型排它鎖(eXclusiveLocks)又稱為寫鎖或X鎖。其含義是:事務(wù)T獲得了數(shù)據(jù)對象A的X鎖之后,T可以對A進(jìn)行讀寫,而其它事務(wù)只有等到T事務(wù)提交之后釋放了對A的X鎖之后,才能對A進(jìn)行封鎖和讀寫操作。T2T1XSS×√X××nolock√√共享鎖(SharingLocks)又稱為讀鎖或S鎖。其含義是:事務(wù)T獲得了數(shù)據(jù)A上的S鎖之后,T可以讀A但不能寫A;同時其它事務(wù)可以對A加S鎖但不能加X鎖,即共享鎖允許多個不同的事務(wù)可以同時讀A,但在事務(wù)T釋放A上的S鎖之前,其它事務(wù)(包括T本身)都不能寫A。封鎖協(xié)議封鎖協(xié)議(LockingProtocol)是約定的一些加鎖的規(guī)則,如何時申請鎖、持鎖的時間、何時釋放鎖等。對封鎖方式規(guī)定不一樣,就形成了不同的封鎖協(xié)議一級封鎖協(xié)議二級封鎖協(xié)議三級封鎖協(xié)議一級封鎖協(xié)議對事務(wù)T要修改的數(shù)據(jù)加X鎖,直到事務(wù)結(jié)束時才釋放。防止丟失更新tT1T201Xlockquantity02Read
quantity=1003quantityquantity-4Xlockquantity04Writequantity=6Wait05CommitWait06UnXlockquantityWait07GetXlockquantity08Read
quantity=609quantityquantity-310Writequantity=311Commit12UnXlockquantity二級封鎖協(xié)議一級封鎖協(xié)議+“事務(wù)T對要讀取的數(shù)據(jù)加S鎖,讀完后即釋放S鎖”。既防止丟失更新,又防止讀“臟數(shù)據(jù)”tT1T201Xlockquantity
02Readquantity=100
03Writequantity=0
04
Slockquantity05ROLLBACK(quantity=100)Wait
06UnXlockquantityWait07
GetSlockquantity08
Readquantity=100三級封鎖協(xié)議一級封鎖協(xié)議+“事務(wù)T對要讀取的數(shù)據(jù)加S鎖,
溫馨提示
- 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)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 二零二五年度網(wǎng)絡(luò)安全風(fēng)險評估與解決方案合同范本3篇
- 二零二五版股權(quán)激勵合同:某上市公司對高級管理人員股權(quán)激勵計劃3篇
- 2025年度時尚服飾店開業(yè)活動承包合同3篇
- 2025年度高端不銹鋼醫(yī)療器械制造委托合同3篇
- 二零二五版智能穿戴設(shè)備代加工合同范本2篇
- 二零二五年度環(huán)保型車間生產(chǎn)承包服務(wù)合同范本3篇
- 二零二五年高管子女教育援助與扶持合同3篇
- 2025年草場租賃與牧區(qū)基礎(chǔ)設(shè)施建設(shè)合同3篇
- 二零二五版涵洞工程勞務(wù)分包單價及工期延誤賠償合同3篇
- 二零二五版財務(wù)報表編制會計勞動合同范本3篇
- GB/T 34241-2017卷式聚酰胺復(fù)合反滲透膜元件
- GB/T 12494-1990食品機械專用白油
- 運輸供應(yīng)商年度評價表
- 成熙高級英語聽力腳本
- 北京語言大學(xué)保衛(wèi)處管理崗位工作人員招考聘用【共500題附答案解析】模擬試卷
- 肺癌的診治指南課件
- 人教版七年級下冊數(shù)學(xué)全冊完整版課件
- 商場裝修改造施工組織設(shè)計
- 統(tǒng)編版一年級語文上冊 第5單元教材解讀 PPT
- 加減乘除混合運算600題直接打印
- ASCO7000系列GROUP5控制盤使用手冊
評論
0/150
提交評論