![MySQL數(shù)據(jù)庫(kù)技術(shù)與應(yīng)用(微課版) 課件 模塊5 數(shù)據(jù)庫(kù)安全_第1頁](http://file4.renrendoc.com/view10/M02/3C/3C/wKhkGWWzuJqATytnAAIWayMjLlI317.jpg)
![MySQL數(shù)據(jù)庫(kù)技術(shù)與應(yīng)用(微課版) 課件 模塊5 數(shù)據(jù)庫(kù)安全_第2頁](http://file4.renrendoc.com/view10/M02/3C/3C/wKhkGWWzuJqATytnAAIWayMjLlI3172.jpg)
![MySQL數(shù)據(jù)庫(kù)技術(shù)與應(yīng)用(微課版) 課件 模塊5 數(shù)據(jù)庫(kù)安全_第3頁](http://file4.renrendoc.com/view10/M02/3C/3C/wKhkGWWzuJqATytnAAIWayMjLlI3173.jpg)
![MySQL數(shù)據(jù)庫(kù)技術(shù)與應(yīng)用(微課版) 課件 模塊5 數(shù)據(jù)庫(kù)安全_第4頁](http://file4.renrendoc.com/view10/M02/3C/3C/wKhkGWWzuJqATytnAAIWayMjLlI3174.jpg)
![MySQL數(shù)據(jù)庫(kù)技術(shù)與應(yīng)用(微課版) 課件 模塊5 數(shù)據(jù)庫(kù)安全_第5頁](http://file4.renrendoc.com/view10/M02/3C/3C/wKhkGWWzuJqATytnAAIWayMjLlI3175.jpg)
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
BYYUSHEN數(shù)據(jù)庫(kù)技術(shù)與應(yīng)用DATABASETECHNOLOGYANDAPPLICATION任務(wù)1管理用戶和權(quán)限任務(wù)2使用事務(wù)和鎖管理并發(fā)控制
項(xiàng)目模塊5數(shù)據(jù)庫(kù)
安全篇CONTENTSBYYUSHENYOURLOGOAUNIVERSITY01任務(wù)1管理用戶和權(quán)限點(diǎn)擊查看本任務(wù)知識(shí)技術(shù)點(diǎn)02任務(wù)2使用事務(wù)和鎖管理并發(fā)控制點(diǎn)擊查看本任務(wù)知識(shí)技術(shù)點(diǎn)BYYUSHEN崗位能力能使用SQL命令和Workbench圖形化工具創(chuàng)建維護(hù)用戶;能使用SQL命令和Workbench圖形化工具分配維護(hù)用戶的權(quán)限;能使用SQL命令和Workbench圖形化工具創(chuàng)建和維護(hù)角色;能為數(shù)據(jù)庫(kù)設(shè)置合理的隔離級(jí)別;能使用SQL命令設(shè)置事務(wù)隔離級(jí)別;能使用SQL命令進(jìn)行MySQL事務(wù)并發(fā)控制。技能證書標(biāo)準(zhǔn)解答客戶數(shù)據(jù)庫(kù)用戶管理、權(quán)限管理的理論和操作問題;解答客戶數(shù)據(jù)庫(kù)事務(wù)概念、隔離級(jí)別的理論和操作問題;指導(dǎo)客戶運(yùn)用SQL語句創(chuàng)建、維護(hù)用戶,分配用戶權(quán)限;根據(jù)客戶需求運(yùn)用SQL語句控制并發(fā)操作;推薦客戶使用合理的數(shù)據(jù)安全方案;指導(dǎo)客戶事務(wù)并發(fā)控制語句、保障數(shù)據(jù)的一致性、隔離性、完整性操作方法及應(yīng)用。思政素養(yǎng)養(yǎng)成嚴(yán)謹(jǐn)細(xì)致的工作態(tài)度和操作習(xí)慣;安全是基石,憂患非憂天,預(yù)防保安全,培養(yǎng)“勿忘數(shù)據(jù)安全、
全面考慮任務(wù)、未雨綢繆、警鐘長(zhǎng)鳴”的精神。數(shù)據(jù)庫(kù)安全
數(shù)據(jù)庫(kù)技術(shù)與應(yīng)用項(xiàng)目模塊5BYYUSHEN數(shù)據(jù)庫(kù)安全
數(shù)據(jù)庫(kù)技術(shù)與應(yīng)用項(xiàng)目模塊5高校教學(xué)質(zhì)量分析管理系統(tǒng)數(shù)據(jù)庫(kù)db_teaching數(shù)據(jù)是數(shù)字經(jīng)濟(jì)社會(huì)的重要資源和核心資產(chǎn),數(shù)據(jù)安全的重要性也就可想而知,而大量的重要數(shù)據(jù)往往存放在數(shù)據(jù)庫(kù)系統(tǒng)中,如何保護(hù)數(shù)據(jù)庫(kù),有效防范信息泄露和篡改成為重要的安全保障目標(biāo)。為實(shí)現(xiàn)和維護(hù)“高校教學(xué)質(zhì)量分析管理系統(tǒng)”數(shù)據(jù)庫(kù)的安全,避免惡意攻擊或者越權(quán)訪問數(shù)據(jù)庫(kù)中的數(shù)據(jù),G-EDU格諾博公司對(duì)系統(tǒng)需根據(jù)不同類型的操作數(shù)據(jù)庫(kù)人員創(chuàng)建、刪除用戶,并為用戶分配相應(yīng)的訪問數(shù)據(jù)庫(kù)權(quán)限。為防止多用戶同時(shí)操作可能導(dǎo)致數(shù)據(jù)的不一致,通過對(duì)數(shù)據(jù)進(jìn)行事務(wù)隔離和鎖的管理手段,保障數(shù)據(jù)一致性和高可用性。項(xiàng)目模塊情境BYYUSHEN任務(wù)一管理用戶和權(quán)限“高校教學(xué)質(zhì)量分析管理系統(tǒng)”中需要設(shè)置教學(xué)質(zhì)量督導(dǎo)部門及教務(wù)處管理員、教師、學(xué)生三種類型的用戶,每一類型用戶操作數(shù)據(jù)庫(kù)的需求不一樣,所要分配的權(quán)限也不一樣。教學(xué)質(zhì)量督導(dǎo)部門及教務(wù)處管理員可以對(duì)所有表數(shù)據(jù)進(jìn)行錄入、刪除、更新、查看等所有權(quán)限,任課教師可以錄入課程評(píng)學(xué)成績(jī),但不能修改學(xué)生表、課程表等教學(xué)基礎(chǔ)數(shù)據(jù),學(xué)生則只可以錄入評(píng)學(xué)評(píng)教成績(jī)表中對(duì)課程任課教師的評(píng)教分?jǐn)?shù),可以查詢自己的評(píng)學(xué)考試成績(jī)。任務(wù)描述01BYYUSHEN01
數(shù)據(jù)庫(kù)技術(shù)與應(yīng)用5.1.1用戶和權(quán)限任務(wù)一管理用戶和權(quán)限QUERYDATAINASINGLETABLEMySQL服務(wù)器通過權(quán)限表來控制用戶對(duì)數(shù)據(jù)庫(kù)的訪問,在安裝MySQL時(shí),會(huì)自動(dòng)安裝名為mysql的系統(tǒng)數(shù)據(jù)庫(kù),存放了有關(guān)于用戶賬戶和授權(quán)的權(quán)限表,分別是user表(存儲(chǔ)全局權(quán)限表)、db表(存儲(chǔ)數(shù)據(jù)庫(kù)層級(jí)權(quán)限表)、tables_priv表(存儲(chǔ)表層級(jí)權(quán)限表)、columns_priv表(存儲(chǔ)列層級(jí)權(quán)限表)、procs_priv(存儲(chǔ)過程和存儲(chǔ)函數(shù)權(quán)限表)等。MySQL服務(wù)啟動(dòng)時(shí),會(huì)讀取mysql數(shù)據(jù)庫(kù)中的權(quán)限表,并將表中的數(shù)據(jù)加載到內(nèi)存,當(dāng)用戶進(jìn)行數(shù)據(jù)庫(kù)訪問操作時(shí),MySQL會(huì)根據(jù)權(quán)限表中的內(nèi)容對(duì)用戶做相應(yīng)的權(quán)限控制。BYYUSHEN01
數(shù)據(jù)庫(kù)技術(shù)與應(yīng)用5.1.1用戶和權(quán)限任務(wù)一管理用戶和權(quán)限QUERYDATAINASINGLETABLEmysql系統(tǒng)數(shù)據(jù)庫(kù)中的user表是權(quán)限表中最為重要的表,它記錄了允許連接到服務(wù)器的賬號(hào)信息和一些全局級(jí)的權(quán)限信息,有51個(gè)字段,這些字段可以分成4類,分別是范圍列、權(quán)限列、安全列和資源控制列。MySQL中可通過“DESCRIBEmysql.user”語句查看user表的基本結(jié)構(gòu)。1user表BYYUSHEN01
數(shù)據(jù)庫(kù)技術(shù)與應(yīng)用5.1.1用戶和權(quán)限任務(wù)一管理用戶和權(quán)限QUERYDATAINASINGLETABLEdb表是數(shù)據(jù)庫(kù)級(jí)別授予權(quán)限的系統(tǒng)表,適用于數(shù)據(jù)庫(kù)和數(shù)據(jù)庫(kù)中所有對(duì)象,決定哪些用戶能從哪些主機(jī)訪問存取哪些數(shù)據(jù)庫(kù)。MySQL中可通過“DESCRIBEmysql.db”語句查看db表的基本結(jié)構(gòu)。db表2BYYUSHEN01
數(shù)據(jù)庫(kù)技術(shù)與應(yīng)用5.1.1用戶和權(quán)限任務(wù)一管理用戶和權(quán)限QUERYDATAINASINGLETABLEMysql系統(tǒng)數(shù)據(jù)庫(kù)中,user表所授權(quán)限是針對(duì)MySQL服務(wù)器中所有數(shù)據(jù)庫(kù),db表所授權(quán)限是針對(duì)MySQL服務(wù)器中某些數(shù)據(jù)庫(kù)。用戶的信息都保存在mysql.user表中,雖然創(chuàng)建用戶可以直接利用root超級(jí)管理員用戶賬戶,在登錄MySQL服務(wù)器后向mysql.user表中插入用戶記錄,但在開發(fā)中為保證數(shù)據(jù)的安全,且MySQL8版本移除了PASSWORD的加密方法,因此并不推薦使用此方式創(chuàng)建用戶,而是采用MySQL提供的CREATEUSER和GRANT語句創(chuàng)建用戶。BYYUSHEN01
數(shù)據(jù)庫(kù)技術(shù)與應(yīng)用5.1.2用戶管理任務(wù)一管理用戶和權(quán)限QUERYDATAINASINGLETABLEMySQL的用戶賬戶管理包括創(chuàng)建用戶、刪除用戶、密碼管理等內(nèi)容。在成功安裝MySQL8后,默認(rèn)情況下,MySQL8會(huì)自動(dòng)創(chuàng)建root超級(jí)管理員用戶。MySQL8引入了基于SYSTEM_USER權(quán)限的用戶賬號(hào)類別的概念,具有SYSTEM_USER權(quán)限的用戶為系統(tǒng)用戶,否則只是普通用戶。系統(tǒng)用戶可以創(chuàng)建和修改系統(tǒng)賬戶,普通用戶不能修改系統(tǒng)賬戶,只能修改普通賬戶。通過SELECT查詢語句可以查看mysql.user表中當(dāng)前MySQL服務(wù)器中的用戶。BYYUSHEN01
數(shù)據(jù)庫(kù)技術(shù)與應(yīng)用5.1.2
用戶管理任務(wù)一管理用戶和權(quán)限QUERYDATAINASINGLETABLECREATEUSER用戶名1[IDENTIFIEDBY[PASSWORD]'密碼1'][,...];用戶名:由用戶(User)和主機(jī)名(Host)構(gòu)成,如果只指定用戶名部分,主機(jī)名部分則默認(rèn)為‘%’(即對(duì)所有的主機(jī)開放權(quán)限)。IDENTIFIEDBY:用來設(shè)置用戶的密碼。CREATEUSER語句可以同時(shí)創(chuàng)建多個(gè)用戶。新用戶可以沒有初始密碼,但從數(shù)據(jù)庫(kù)安全角度考慮,不推薦使用空密碼。1新建普遍用戶BYYUSHEN01
數(shù)據(jù)庫(kù)技術(shù)與應(yīng)用5.1.2
用戶管理任務(wù)一管理用戶和權(quán)限QUERYDATAINASINGLETABLEDROPUSER用戶名1[,...];DROPUSER不能自動(dòng)關(guān)閉任何打開的用戶對(duì)話。如果用戶有打開的對(duì)話,此時(shí)刪除用戶,命令則不會(huì)生效,直到用戶對(duì)話被關(guān)閉后才能生效。一旦對(duì)話被關(guān)閉,用戶也被刪除,此用戶再次試圖登錄時(shí)將會(huì)失敗。2刪除普遍用戶BYYUSHEN01
數(shù)據(jù)庫(kù)技術(shù)與應(yīng)用5.1.2用戶管理任務(wù)一單表數(shù)據(jù)查詢QUERYDATAINASINGLETABLE在本機(jī)localhost中新建2個(gè)用戶,用戶名分別為test1、test2,密碼分別為test1、test2。刪除本機(jī)localhost中的用戶test1。BYYUSHEN01
數(shù)據(jù)庫(kù)技術(shù)與應(yīng)用5.1.2用戶管理任務(wù)一單表數(shù)據(jù)查詢QUERYDATAINASINGLETABLEALTERUSERUSER()IDENTIFIEDBY'新密碼'
;3root用戶修改自己的密碼root用戶擁有很高的權(quán)限,因此必須保證root用戶的密碼安全。root用戶可以通過ALTERUSER語句、SET語句等多種方式來修改密碼,使用ALTERUSER語句修改用戶密碼是MySQL官方推薦的方式。使用ALTERUSER語句將root用戶的密碼修改為“hellomysql”。BYYUSHEN01
數(shù)據(jù)庫(kù)技術(shù)與應(yīng)用5.1.2用戶管理任務(wù)一單表數(shù)據(jù)查詢QUERYDATAINASINGLETABLESETPASSWORD='新密碼'
;3root用戶修改自己的密碼使用root用戶登錄MySQL后,也可以使用SET語句來修改密碼,該語句會(huì)自動(dòng)將密碼加密后再賦給當(dāng)前用戶。使用SET語句將root用戶的密碼修改為“root123”。SET語句修改密碼會(huì)自動(dòng)將密碼加密后再賦給當(dāng)前用戶。普通用戶可對(duì)自己的密碼進(jìn)行管理,方法與root用戶修改自己的密碼相同。BYYUSHEN01
數(shù)據(jù)庫(kù)技術(shù)與應(yīng)用5.1.2
用戶管理任務(wù)一管理用戶和權(quán)限QUERYDATAINASINGLETABLEALTERUSER用戶名1[IDENTIFIEDBY[PASSWORD]'密碼1'][,...];用戶名:由用戶(User)和主機(jī)名(Host)構(gòu)成,如果只指定用戶名部分,主機(jī)名部分則默認(rèn)為‘%’(即對(duì)所有的主機(jī)開放權(quán)限)。IDENTIFIEDBY:用來設(shè)置用戶的密碼。ALTERUSER語句可以同時(shí)修改多個(gè)普通用戶的密碼。4root用戶修改普通用戶的密碼root用戶不僅可以修改自己密碼,還可以修改普通用戶的密碼。root用戶登錄MySQL服務(wù)器后,可以通過ALTERUSER語句和SET語句方式來修改普通用戶的密碼。BYYUSHEN01
數(shù)據(jù)庫(kù)技術(shù)與應(yīng)用5.1.2
用戶管理任務(wù)一管理用戶和權(quán)限QUERYDATAINASINGLETABLESETPASSWORDFOR用戶名='新密碼’;4root用戶修改普通用戶的密碼root用戶還可以使用SET語句來修改普通用戶的密碼。將本機(jī)普通用戶test1的密碼修改為“hellomysql”。將本機(jī)普通用戶test1的密碼修改為“test”。BYYUSHEN01
數(shù)據(jù)庫(kù)技術(shù)與應(yīng)用5.1.3權(quán)限管理任務(wù)一管理用戶和權(quán)限QUERYDATAINASINGLETABLE權(quán)限User表中對(duì)應(yīng)的列權(quán)限范圍說明CREATECreate_priv數(shù)據(jù)庫(kù)、表或索引創(chuàng)建數(shù)據(jù)庫(kù)、表或索引DROPDrop_priv數(shù)據(jù)庫(kù)、表或視圖刪除數(shù)據(jù)庫(kù)、表或視圖GRANTOPTIONGrant_priv數(shù)據(jù)庫(kù)、表或存儲(chǔ)過程賦予權(quán)限選項(xiàng)REFERENCESReferences_priv數(shù)據(jù)表創(chuàng)建數(shù)據(jù)庫(kù)的表外鍵ALTERAlter_priv
表、數(shù)據(jù)庫(kù)修改數(shù)據(jù)庫(kù)中數(shù)據(jù)表INDEXIndex_priv表數(shù)據(jù)表上定義刪除索引SELECTSelect_priv表、視圖數(shù)據(jù)表和視圖查詢INSERTInsert_priv表、視圖添加表數(shù)據(jù)行DELETEDelete_priv表刪除表數(shù)據(jù)行UPDATEUpdate_priv表、視圖更新表數(shù)據(jù)CREATEVIEWCreate_view_priv視圖創(chuàng)建視圖SHOWVIEWShow_view_priv視圖查看視圖ALTERROUTINEAlter_routine_priv存儲(chǔ)過程、函數(shù)更改存儲(chǔ)過程或函數(shù)CREATEROUTINECreate_routine_priv存儲(chǔ)過程、函數(shù)創(chuàng)建存儲(chǔ)過程或函數(shù)EXECUTEExecute_priv存儲(chǔ)過程、函數(shù)執(zhí)行存儲(chǔ)過程或函數(shù)。FILEFile_priv服務(wù)器管理訪問服務(wù)器上的文件CREATETEMPORARYTABLESCreate_rmp_table_priv服務(wù)器管理創(chuàng)建臨時(shí)表LOCKTABLESLock_tables_priv服務(wù)器管理鎖定特定數(shù)據(jù)表CREATEUSERCreate_user_priv服務(wù)器管理創(chuàng)建用戶PROCESSProcess_priv服務(wù)器管理查看進(jìn)程RELOADReload_priv服務(wù)器管理使用FLUSH語句REPLICATIONCLIENTRepl_client_priv服務(wù)器管理復(fù)制權(quán)限REPLICATIONSLAVERepl_slave_priv服務(wù)器管理復(fù)制權(quán)限SHOWDATABASESShow_db_priv服務(wù)器管理查看數(shù)據(jù)庫(kù)SHUTDOWNShutdown_priv服務(wù)器管理關(guān)閉數(shù)據(jù)庫(kù)SUPERSuper_priv服務(wù)器管理執(zhí)行kill線程為保證數(shù)據(jù)安全,數(shù)據(jù)庫(kù)管理員需為不同層級(jí)的操作人員分配不同權(quán)限,限制登錄MySQL服務(wù)器的用戶只能在其權(quán)限范圍內(nèi)操作。同時(shí)管理員還可以根據(jù)不同的情況為用戶增加權(quán)限或回收權(quán)限,從而控制數(shù)據(jù)操作保存的權(quán)限。在MySQL啟動(dòng)時(shí),服務(wù)器將這些數(shù)據(jù)庫(kù)表中權(quán)限信息的內(nèi)容讀入內(nèi)存BYYUSHEN01
數(shù)據(jù)庫(kù)技術(shù)與應(yīng)用5.1.3權(quán)限管理任務(wù)一管理用戶和權(quán)限QUERYDATAINASINGLETABLE
GRANT語句可以創(chuàng)建新用戶同時(shí),為用戶授權(quán)。授予的權(quán)限可以分為用戶(全局)層級(jí)權(quán)限、數(shù)據(jù)庫(kù)層級(jí)權(quán)限、數(shù)據(jù)表層級(jí)權(quán)限、字段層級(jí)別權(quán)限、過程層級(jí)權(quán)限。
權(quán)限層級(jí)如表所示。1授予權(quán)限權(quán)限層級(jí)可設(shè)置的權(quán)限類型用戶層級(jí)Create、Alter、Drop、Grant、ShowDatabases、Execute數(shù)據(jù)庫(kù)層級(jí)CreateRoutine、Execute、AlterRoutine、Grant數(shù)據(jù)表層級(jí)Select、Insert、Update、Delete、Create、Drop、Grant、References、Index、Alter字段層級(jí)Select、Insert、Update、References過程層級(jí)CreateRoutine、Execute、AlterRoutine、GrantBYYUSHEN01
數(shù)據(jù)庫(kù)技術(shù)與應(yīng)用5.1.3
權(quán)限管理任務(wù)一管理用戶和權(quán)限QUERYDATAINASINGLETABLEGRANTALLON*.*TO用戶名
[WITHGRANTOPTION];ALL:表示授予全部權(quán)限。*.*:表示MySQL服務(wù)器中所有數(shù)據(jù)庫(kù)。用戶名:用來指定授予權(quán)限用戶。WITHGRANTOPTION:表示當(dāng)前用戶可以為其他用戶進(jìn)行授權(quán)。用戶(全局)層級(jí)全局權(quán)限適用于一個(gè)給定服務(wù)器中的所有數(shù)據(jù)庫(kù)。這些權(quán)限存儲(chǔ)在mysql.user表中。GRANT語句授予全局權(quán)限,BYYUSHEN01
數(shù)據(jù)庫(kù)技術(shù)與應(yīng)用5.1.3
權(quán)限管理任務(wù)一管理用戶和權(quán)限QUERYDATAINASINGLETABLEGRANT權(quán)限名稱ON數(shù)據(jù)庫(kù)名
TO用戶名
[WITHGRANTOPTION];權(quán)限名稱:授予的權(quán)限,如SELECT、UPDATE、DELETE等,如果要給數(shù)據(jù)表授予數(shù)據(jù)表層級(jí)所有類型的權(quán)限,則改為“ALL”即可。數(shù)據(jù)庫(kù)名:指定授予權(quán)限的數(shù)據(jù)庫(kù)的名稱。用戶名:用來指定授予權(quán)限的用戶。數(shù)據(jù)庫(kù)層級(jí)數(shù)據(jù)庫(kù)權(quán)限適用于一個(gè)給定數(shù)據(jù)庫(kù)中的所有對(duì)象。這些權(quán)限存儲(chǔ)在mysql.db表中。GRANT語句授予特定數(shù)據(jù)庫(kù)的權(quán)限BYYUSHEN01
數(shù)據(jù)庫(kù)技術(shù)與應(yīng)用5.1.3
權(quán)限管理任務(wù)一管理用戶和權(quán)限QUERYDATAINASINGLETABLEGRANT權(quán)限名稱ON數(shù)據(jù)庫(kù)表名
TO用戶名
;數(shù)據(jù)表層級(jí)數(shù)據(jù)表權(quán)限適用于一個(gè)給定表中的所有字段。這些權(quán)限存儲(chǔ)在mysql.tables_priv表中。GRANT語句授予特定數(shù)據(jù)庫(kù)中所有字段的權(quán)限GRANT權(quán)限名稱(字段名稱)ON數(shù)據(jù)庫(kù)表名
TO用戶名;字段層級(jí)字段權(quán)限適用于一個(gè)給定表中的單一字段。這些權(quán)限存儲(chǔ)在mysql.columns_priv表中。對(duì)于字段權(quán)限,權(quán)限名稱只能取Select、Insert、Update,并且權(quán)限名后需要加上字段名。當(dāng)使用REVOKE時(shí),必須指定與被授權(quán)字段相同的字段。GRANT語句授予特定字段的權(quán)限過程層級(jí)過程權(quán)限適用于數(shù)據(jù)表中已經(jīng)有的存儲(chǔ)過程和函數(shù),可以被授予為全局層級(jí)和數(shù)據(jù)庫(kù)層級(jí)。權(quán)限名稱只能取CreateRoutine、Execute、AlterRoutine、Grant。這些權(quán)限存儲(chǔ)在cs_priv表中。GRANT語句授予指定用戶對(duì)存儲(chǔ)過程操作和已有函數(shù)操作權(quán)限GRANT權(quán)限名稱ONPROCEDURE數(shù)據(jù)庫(kù)名稱.存儲(chǔ)過程名稱TO用戶名
;GRANT權(quán)限名稱ONFUNCTION數(shù)據(jù)庫(kù)名稱.函數(shù)名稱TO用戶名
;BYYUSHEN01
數(shù)據(jù)庫(kù)技術(shù)與應(yīng)用5.1.3用戶管理任務(wù)一單表數(shù)據(jù)查詢QUERYDATAINASINGLETABLE任課教師可以通過高校教學(xué)質(zhì)量分析管理系統(tǒng)對(duì)學(xué)生評(píng)學(xué)成績(jī)進(jìn)行錄入和查詢操作。為教師周老師創(chuàng)建一個(gè)用戶賬戶“teacher_zhou”,密碼為“test”,授予周老師對(duì)db_teaching數(shù)據(jù)庫(kù)的評(píng)學(xué)評(píng)教表tb_grade數(shù)據(jù)添加和查詢的權(quán)限。BYYUSHEN01
數(shù)據(jù)庫(kù)技術(shù)與應(yīng)用5.1.3
權(quán)限管理任務(wù)一管理用戶和權(quán)限QUERYDATAINASINGLETABLESHOWGRANTSFOR'用戶名
'@'主機(jī)名
';用戶名:指登錄用戶的名稱。主機(jī)名:指登錄主機(jī)名稱。查看權(quán)限SHOWGRANTS語句可以顯示指定用戶的權(quán)限信息,其命令語法格式如下:2查詢教師用戶teacher_zhou的權(quán)限信息。BYYUSHEN01
數(shù)據(jù)庫(kù)技術(shù)與應(yīng)用5.1.3
權(quán)限管理任務(wù)一管理用戶和權(quán)限QUERYDATAINASINGLETABLEREVOKE權(quán)限名稱
ON數(shù)據(jù)庫(kù)表名
FROM用戶名
;權(quán)限名稱:要回收的權(quán)限,如SELECT、UPDATE、DELETE等。數(shù)據(jù)庫(kù)表名:指回收權(quán)限數(shù)據(jù)庫(kù)表名稱。用戶名:指回收權(quán)限用戶?;厥諜?quán)限回收權(quán)限就是取消已經(jīng)賦予用戶的某些權(quán)限,收回用戶不必要的權(quán)限可以在一定程度上保證系統(tǒng)的安全性。MySQL中使用REVOKE語句取消用戶的某些權(quán)限。收回權(quán)限之后,用戶的記錄將從權(quán)限表中刪除,但是用戶記錄依然在user表中保存3BYYUSHEN01
數(shù)據(jù)庫(kù)技術(shù)與應(yīng)用5.1.3
權(quán)限管理任務(wù)一管理用戶和權(quán)限QUERYDATAINASINGLETABLE回收權(quán)限3回收周老師的用戶賬戶teacher_zhou對(duì)高校教學(xué)質(zhì)量分析管理系統(tǒng)數(shù)據(jù)庫(kù)db_teaching的tb_grade表INSERT權(quán)限BYYUSHEN01
數(shù)據(jù)庫(kù)技術(shù)與應(yīng)用5.1.4
角色管理任務(wù)一管理用戶和權(quán)限QUERYDATAINASINGLETABLECREATEROLE'角色名稱'[@'主機(jī)名
'];角色名稱:與用戶名稱非常相似,設(shè)置一類角色的名稱。主機(jī)名:表示主機(jī)名稱,如果省略主機(jī)名稱,則主機(jī)名稱默認(rèn)為“%”。1創(chuàng)建角色并分配權(quán)限當(dāng)用戶數(shù)量較多時(shí),為了避免單獨(dú)給每一個(gè)用戶授予多個(gè)權(quán)限,可以先將權(quán)限集合放入角色中,再賦予用戶相應(yīng)的角色創(chuàng)建角色使用GREATEROLE語句MySQL從8.0版本開始,在用戶管理中增加了角色管理功能。角色是指定權(quán)限的集合。對(duì)角色也可以授予和撤銷其特權(quán)。如果用戶被授予角色權(quán)限,則該用戶擁有該角色的權(quán)限BYYUSHEN01
數(shù)據(jù)庫(kù)技術(shù)與應(yīng)用5.1.4角色管理任務(wù)一管理用戶和權(quán)限QUERYDATAINASINGLETABLE創(chuàng)建角色counsellor,授予該角色對(duì)高校教學(xué)質(zhì)量分析管理系統(tǒng)數(shù)據(jù)庫(kù)db_teaching的學(xué)生表tb_student的SELECT、INSERT、DELETE權(quán)限。GRANT'權(quán)限名稱'[@'主機(jī)名
']ON'數(shù)據(jù)庫(kù)名稱
'TO'角色名稱'[@'主機(jī)名
'];角色創(chuàng)建完成后,需要使用GRANT語句給角色授予權(quán)限2BYYUSHEN01
數(shù)據(jù)庫(kù)技術(shù)與應(yīng)用5.1.4
角色管理任務(wù)一管理用戶和權(quán)限QUERYDATAINASINGLETABLEGRANT角色名1[,…]TO用戶名1[,…];SETROLEDEFAULT;可將多個(gè)角色同時(shí)賦予給多個(gè)用戶,同英文逗號(hào)(,)隔開即可。用戶添加之后,如果角色處于未激活狀態(tài),需要先將用戶對(duì)應(yīng)的角色激活,才能擁有對(duì)應(yīng)的權(quán)限。3為用戶添加角色角色創(chuàng)建并授權(quán)后,要賦給用戶并處于激活狀態(tài)才能發(fā)揮作用。給用戶添加角色可使用GRANT語句激活角色使用SET語句。BYYUSHEN01
數(shù)據(jù)庫(kù)技術(shù)與應(yīng)用5.1.4角色管理任務(wù)一管理用戶和權(quán)限QUERYDATAINASINGLETABLE新建一個(gè)用戶counsellor_zhou,密碼為test1,將其添加到counsellor角色,并激活該角色。BYYUSHEN01
數(shù)據(jù)庫(kù)技術(shù)與應(yīng)用5.1.4
角色管理任務(wù)一管理用戶和權(quán)限QUERYDATAINASINGLETABLEREVOKE角色名稱FROM用戶名
;REVOKE權(quán)限名稱ON數(shù)據(jù)庫(kù)名
TO用戶名
;3編輯角色或權(quán)限角色授權(quán)后,可以對(duì)角色的權(quán)限進(jìn)行添加或撤銷。在給用戶添加角色后,也可以對(duì)用戶的角色進(jìn)行撤銷操作。REVOKE語句可以實(shí)現(xiàn)撤銷角色的權(quán)限,也可以撤銷用戶對(duì)應(yīng)的角色撤銷用戶counsellor_zhou的counsellor角色,并撤銷counsellor角色的Delete權(quán)限。BYYUSHEN01
數(shù)據(jù)庫(kù)技術(shù)與應(yīng)用5.1.4
角色管理任務(wù)一管理用戶和權(quán)限QUERYDATAINASINGLETABLEDROPROLE角色名稱;4編輯角色或權(quán)限使用DROPROLE語句可以刪除角色刪除counsellor角色。BYYUSHEN01
數(shù)據(jù)庫(kù)技術(shù)與應(yīng)用5.1.5使用SQL命令行對(duì)用戶和權(quán)限管理任務(wù)一管理用戶和權(quán)限QUERYDATAINASINGLETABLE“高校教學(xué)質(zhì)量分析管理系統(tǒng)”中需要設(shè)置教學(xué)質(zhì)量督導(dǎo)部門及教務(wù)處manager、教師teacher、學(xué)生student三種角色。BYYUSHEN01
數(shù)據(jù)庫(kù)技術(shù)與應(yīng)用5.1.5使用SQL命令行對(duì)用戶和權(quán)限管理任務(wù)一管理用戶和權(quán)限QUERYDATAINASINGLETABLE為教學(xué)質(zhì)量督導(dǎo)部門及教務(wù)處管理員manager角色,分配對(duì)所有表數(shù)據(jù)進(jìn)行錄入、刪除、更新、查看等操作的所有權(quán)限。為教師teacher角色分配錄入課程評(píng)學(xué)成績(jī)的權(quán)限、查看所有教學(xué)基礎(chǔ)表的權(quán)限。為學(xué)生student角色分配錄入評(píng)學(xué)評(píng)教成績(jī)表中的評(píng)教分?jǐn)?shù)權(quán)限和查看自己成績(jī)的權(quán)限。BYYUSHEN01
數(shù)據(jù)庫(kù)技術(shù)與應(yīng)用5.1.5使用SQL命令行對(duì)用戶和權(quán)限管理任務(wù)一管理用戶和權(quán)限QUERYDATAINASINGLETABLE創(chuàng)建教學(xué)質(zhì)量督導(dǎo)部門周老師manager_zhou及教務(wù)處王老師manager_wang用戶,設(shè)置這兩個(gè)用戶為manager角色。創(chuàng)建崔老師teacher_cui用戶,設(shè)置該用戶為teacher角色;創(chuàng)建沈同學(xué)student_shen、蔡同學(xué)student_cai用戶,設(shè)置兩個(gè)用戶為student角色。BYYUSHEN01
數(shù)據(jù)庫(kù)技術(shù)與應(yīng)用5.1.5使用SQL命令行對(duì)用戶和權(quán)限管理任務(wù)一管理用戶和權(quán)限QUERYDATAINASINGLETABLE激活角色,并查看manager_zhou、teacher_cui、student_shen三個(gè)用戶的權(quán)限。BYYUSHEN01
數(shù)據(jù)庫(kù)技術(shù)與應(yīng)用5.1.6使用MySQLWorkbench對(duì)用戶和權(quán)限管理任務(wù)一管理用戶和權(quán)限QUERYDATAINASINGLETABLE用戶可以通過MySQLWorkbench工具,在圖形化界面下很方便地管理用戶與權(quán)限。打開MySQLWorkbench圖形化客戶端軟件,連接MySQL8服務(wù)器;點(diǎn)擊界面左側(cè)的“UserandPrivileges”選項(xiàng),然后單擊右側(cè)界面下方的“AddAccount”按鈕BYYUSHEN01
數(shù)據(jù)庫(kù)技術(shù)與應(yīng)用5.1.6使用MySQLWorkbench對(duì)用戶和權(quán)限管理任務(wù)一管理用戶和權(quán)限QUERYDATAINASINGLETABLE開始添加test用戶,輸入用戶名和密碼,其中l(wèi)imitConnectivitytoHostsMatching表示限制連接MySQL服務(wù)器的遠(yuǎn)程地址(%表示不受限制)。BYYUSHEN01
數(shù)據(jù)庫(kù)技術(shù)與應(yīng)用任務(wù)一管理用戶和權(quán)限QUERYDATAINASINGLETABLE單擊“AccountLimits”選項(xiàng),設(shè)置資源控制列,即用戶每小時(shí)可使用服務(wù)器資源的限制數(shù)5.1.6使用MySQLWorkbench對(duì)用戶和權(quán)限管理BYYUSHEN01
數(shù)據(jù)庫(kù)技術(shù)與應(yīng)用任務(wù)一管理用戶和權(quán)限QUERYDATAINASINGLETABLE單擊“AdministrativeRoles”選項(xiàng),選擇需要的角色和權(quán)限,單擊“Apply”按鈕之后,test用戶創(chuàng)建成功5.1.6使用MySQLWorkbench對(duì)用戶和權(quán)限管理BYYUSHEN任務(wù)二事務(wù)和鎖管理并發(fā)控制G-EDU格諾博公司在開發(fā)和設(shè)置“高校教學(xué)質(zhì)量管理分析系統(tǒng)”時(shí),針對(duì)教學(xué)質(zhì)量督導(dǎo)部門人員、教師、學(xué)生的不同角色用戶,在進(jìn)行數(shù)據(jù)操作的過程中,會(huì)遇到需要通過一組SQL語句來完成的情況,必須保證這組所有數(shù)據(jù)操作命令執(zhí)行的同步性、數(shù)據(jù)變更的一致性。當(dāng)一位教師用戶在錄入或修改學(xué)生評(píng)學(xué)成績(jī)時(shí),其他教師用戶應(yīng)該不得同時(shí)對(duì)這個(gè)學(xué)生評(píng)學(xué)成績(jī)也進(jìn)行錄入或修改,要避免因此會(huì)導(dǎo)致的數(shù)據(jù)不一致;缺考或作弊的學(xué)生是不能進(jìn)行對(duì)教師評(píng)教打分的,這樣的操作應(yīng)同步有取消撤銷機(jī)制來保障。所以G-EDU格諾博公司通過MySQL提供的事務(wù)機(jī)制和鎖機(jī)制的策略,來進(jìn)行數(shù)據(jù)的并發(fā)控制。任務(wù)描述01BYYUSHEN02
數(shù)據(jù)庫(kù)技術(shù)與應(yīng)用5.2.1事務(wù)和ACID特性任務(wù)二使用事務(wù)和鎖管理并發(fā)控制QUERYDATAINASINGLETABLE事務(wù)處理在數(shù)據(jù)庫(kù)開發(fā)過程中有著非常重要的作用,它可以保證在同一個(gè)事務(wù)中的操作具有同步性。在MySQL中,事務(wù)就是針對(duì)數(shù)據(jù)庫(kù)的一組操作,它可以由一條或多條SQL語句組成,且每條SQL語句是相互依賴的。只要在程序執(zhí)行過程中有一條SQL語句執(zhí)行失敗或發(fā)生錯(cuò)誤,則其他語句都不會(huì)執(zhí)行。也就是說,事務(wù)的執(zhí)行要么成功,要么返回到事務(wù)開始前的狀態(tài),這就保證了同一事務(wù)操作的同步性和數(shù)據(jù)的完整性。
BYYUSHEN02
數(shù)據(jù)庫(kù)技術(shù)與應(yīng)用5.2.1事務(wù)和ACID特性任務(wù)二使用事務(wù)和鎖管理并發(fā)控制QUERYDATAINASINGLETABLEMySQL中的事務(wù)具有ACID四個(gè)特性:原子性(Atomicity)、一致性(Consistency)、隔離性(Isolation)、持久性(Durability)原子性是指一個(gè)事務(wù)必須被視為一個(gè)不可分割的最小工作單元。只有事務(wù)中所有的數(shù)據(jù)庫(kù)操作都執(zhí)行成功,才能整個(gè)事務(wù)執(zhí)行成功。事務(wù)中如果有任何一個(gè)SQL語句執(zhí)行失敗,已經(jīng)執(zhí)行成功的SQL語句也必須撤銷,數(shù)據(jù)庫(kù)的狀態(tài)退回到執(zhí)行事務(wù)前的狀態(tài)。一致性是指在事務(wù)處理時(shí),無論執(zhí)行成功還是失敗,都要保證數(shù)據(jù)庫(kù)系統(tǒng)處于一致的狀態(tài),保證數(shù)據(jù)庫(kù)系統(tǒng)不會(huì)返回到一個(gè)未處理的事務(wù)中。MySQL的一致性主要由日志機(jī)制實(shí)現(xiàn),記錄數(shù)據(jù)庫(kù)的所有變化,為事務(wù)恢復(fù)提供了跟蹤記錄。隔離性是指當(dāng)一個(gè)事務(wù)在執(zhí)行時(shí),不會(huì)受到其他事物的影響。保證了未完成事務(wù)的所有操作與數(shù)據(jù)庫(kù)系統(tǒng)的隔離,直到事務(wù)完成為止,才能看到事務(wù)執(zhí)行結(jié)果。隔離性相關(guān)的技術(shù)有并發(fā)控制、可串行化、鎖等,當(dāng)多個(gè)用戶并發(fā)訪問數(shù)據(jù)庫(kù)時(shí),數(shù)據(jù)庫(kù)為每一個(gè)用戶開啟的事務(wù),不能被其他事務(wù)的操作數(shù)據(jù)所干擾,多個(gè)并發(fā)事務(wù)之間要相互隔離。持久性是指事務(wù)一旦提交,其對(duì)數(shù)據(jù)庫(kù)的修改就是永久性的,即使系統(tǒng)重啟或者出現(xiàn)系統(tǒng)故障,數(shù)據(jù)仍可恢復(fù)。BYYUSHEN02
數(shù)據(jù)庫(kù)技術(shù)與應(yīng)用5.2.2
事務(wù)的隔離級(jí)別任務(wù)二使用事務(wù)和鎖管理并發(fā)控制QUERYDATAINASINGLETABLE由于數(shù)據(jù)庫(kù)是一個(gè)多用戶的共享資源,MySQL允許多線程并發(fā)訪問,因此用戶可以通過不同的線程執(zhí)行不同的事務(wù)。為了保證這些事務(wù)之間不受影響,對(duì)事務(wù)設(shè)置隔離級(jí)別是十分必要的。SQL標(biāo)準(zhǔn)定義了4種隔離級(jí)別,指定了事務(wù)中哪些數(shù)據(jù)改變?cè)谄渌聞?wù)可見、哪些數(shù)據(jù)改變?cè)谄渌聞?wù)不可見。低級(jí)別的隔離級(jí)別可以支持更高的并發(fā)處理,同時(shí)占用的系統(tǒng)資源更少。
BYYUSHEN02
數(shù)據(jù)庫(kù)技術(shù)與應(yīng)用5.2.2事務(wù)的隔離級(jí)別任務(wù)二使用事務(wù)和鎖管理并發(fā)控制QUERYDATAINASINGLETABLEMySQL中事務(wù)隔離級(jí)別有4種:READ-UNCOMMITTED(讀未提交)READ-UNCOMMITTED是事務(wù)中最低的級(jí)別,該級(jí)別下的事務(wù)可以讀取到另一個(gè)事務(wù)中未提交的數(shù)據(jù),也被稱為臟讀(DirtyRead),這是相當(dāng)危險(xiǎn)的。由于該級(jí)別較低,在實(shí)際開發(fā)中避免不了任何情況,所以一般很少使用。READ-COMMITTED(不可重復(fù)讀)大多數(shù)的數(shù)據(jù)庫(kù)管理系統(tǒng)是默認(rèn)隔離級(jí)別為READ-COMMITTED,該級(jí)別下的事務(wù)只能讀取其他事務(wù)已經(jīng)提交的內(nèi)容,可以避免臟讀,但不能避免重復(fù)讀和幻讀的情況。重復(fù)讀就是在事務(wù)內(nèi)重復(fù)讀取了別的線程已經(jīng)提交的數(shù)據(jù),但兩次讀取的結(jié)果不一致,原因是查詢的過程中其他事務(wù)做了更新的操作。幻讀是指在一個(gè)事務(wù)內(nèi)兩次查詢中數(shù)據(jù)條數(shù)不一致,原因是查詢的過程中其他的事務(wù)做了添加操作。這兩種情況并不算錯(cuò)誤,但有些情況是不符合實(shí)際需求的。BYYUSHEN02
數(shù)據(jù)庫(kù)技術(shù)與應(yīng)用5.2.2事務(wù)的隔離級(jí)別任務(wù)二使用事務(wù)和鎖管理并發(fā)控制QUERYDATAINASINGLETABLEREPEATABLE-READ(可重復(fù)讀)REPEATABLE-READ是MySQL默認(rèn)的隔離級(jí)別,它可以避免臟讀,不可重復(fù)讀的問題,確保同一事務(wù)的多個(gè)實(shí)例在并發(fā)讀取數(shù)據(jù)時(shí),會(huì)看到同樣的數(shù)據(jù)行。但理論上該級(jí)別會(huì)出現(xiàn)幻讀的情況,不過MySQL的存儲(chǔ)引擎通過多版本并發(fā)控制機(jī)制解決了這個(gè)問題,因此該級(jí)別是可以避免幻讀的。SERIALIZABLE(可串行化)SERIALIZABLE是事務(wù)的最高隔離級(jí)別,它會(huì)強(qiáng)制對(duì)事務(wù)進(jìn)行排序,使之不會(huì)發(fā)生沖突,從而解決了臟讀、幻讀、重復(fù)讀的問題。實(shí)際上就是在每個(gè)讀的數(shù)據(jù)行上加鎖。這個(gè)級(jí)別可能導(dǎo)致大量的超時(shí)現(xiàn)象和鎖競(jìng)爭(zhēng),實(shí)際應(yīng)用中很少使用。BYYUSHEN02
數(shù)據(jù)庫(kù)技術(shù)與應(yīng)用5.2.2事務(wù)的隔離級(jí)別任務(wù)二使用事務(wù)和鎖管理并發(fā)控制QUERYDATAINASINGLETABLEMySQL中事務(wù)隔離級(jí)別的4種級(jí)別可能會(huì)產(chǎn)生不同的問題,如臟讀、幻讀、重復(fù)讀、耗時(shí)的操作等。事務(wù)隔離級(jí)別臟讀不可重復(fù)讀幻讀讀未提交(read-uncommitted)是是是不可重復(fù)讀(read-committed)否是是可重復(fù)讀(repeatable-read)否否是可串行化(serializable)否否否BYYUSHEN02
數(shù)據(jù)庫(kù)技術(shù)與應(yīng)用5.2.2事務(wù)的隔離級(jí)別任務(wù)二使用事務(wù)和鎖管理并發(fā)控制QUERYDATAINASINGLETABLE更新丟失:兩個(gè)事務(wù)更新同一行數(shù)據(jù),但是第二個(gè)事務(wù)卻中途失敗退出了,導(dǎo)致對(duì)兩個(gè)修改都失效了,這時(shí)系統(tǒng)沒有執(zhí)行任何鎖操作,因此并發(fā)事務(wù)并沒有被隔離。臟讀:一個(gè)事務(wù)讀了某行數(shù)據(jù),但是另一個(gè)事務(wù)已經(jīng)更新了這一行數(shù)據(jù)。這是非常危險(xiǎn)的,很可能所有的操作都被回滾。不可重復(fù)讀:一個(gè)事務(wù)對(duì)一行數(shù)據(jù)重復(fù)讀取兩次,可是得到了不同的結(jié)果。在兩次讀取數(shù)據(jù)的中途,有可能存在另一個(gè)事務(wù)對(duì)數(shù)據(jù)進(jìn)行了修改?;米x:事務(wù)在操作過程中進(jìn)行兩次查詢,第二次查詢結(jié)果包含了第一次沒有出現(xiàn)的數(shù)據(jù)。出現(xiàn)幻讀的主要原因是兩次查詢過程中另一個(gè)事務(wù)插入新的數(shù)據(jù)。BYYUSHEN02
數(shù)據(jù)庫(kù)技術(shù)與應(yīng)用5.2.3
鎖機(jī)制任務(wù)二使用事務(wù)和鎖管理并發(fā)控制QUERYDATAINASINGLETABLE為解決數(shù)據(jù)庫(kù)并發(fā)控制問題,MySQL中使用鎖機(jī)制,防止其他用戶修改另外一個(gè)未完成的事務(wù)中的數(shù)據(jù),從而實(shí)現(xiàn)事務(wù)的并發(fā)操作,避免造成數(shù)據(jù)的不一致,與此同時(shí),為實(shí)現(xiàn)MySQL的各種隔離級(jí)別,鎖機(jī)制也為其提供了安全保障。MySQL8默認(rèn)的InnoDB存儲(chǔ)引擎支持行級(jí)鎖(row-levellocking),即以記錄為單位進(jìn)行加鎖,也支持表級(jí)鎖(table-levellocking),即以表為單位進(jìn)行加鎖。默認(rèn)的情況下是采用行級(jí)鎖。鎖粒度越小,并發(fā)訪問性能就越高。越適合做并發(fā)更新操作;鎖粒度越大,并發(fā)訪問性能就越低,越適合做并發(fā)查詢操作。不過,鎖粒度越小,完成某個(gè)功能時(shí)所需要的加鎖、解鎖次數(shù)就會(huì)越多,反而會(huì)消耗較多服務(wù)器資源,也容易發(fā)生死鎖問題。BYYUSHEN02
數(shù)據(jù)庫(kù)技術(shù)與應(yīng)用5.2.3
鎖機(jī)制任務(wù)二使用事務(wù)和鎖管理并發(fā)控制QUERYDATAINASINGLETABLE1行級(jí)鎖定行級(jí)鎖最大的特點(diǎn)是鎖定對(duì)象的顆粒度很小,發(fā)生鎖定資源爭(zhēng)用的概率也很小,能夠給予應(yīng)用程序盡可能大的并發(fā)處理能力,從而提高一些需要高并發(fā)應(yīng)用系統(tǒng)的整體性能。InnoDB存儲(chǔ)引擎使用行級(jí)鎖機(jī)制,實(shí)現(xiàn)了兩種類型的行級(jí)鎖,包括共享鎖和排他鎖。而在鎖定機(jī)制的實(shí)現(xiàn)過程中,為了讓行級(jí)鎖定和表級(jí)鎖定共存,InnoDB還使用了兩種內(nèi)部使用的意向鎖,也就是意向共享鎖和意向排他鎖。共享鎖(S):允許一個(gè)事務(wù)讀一行數(shù)據(jù)時(shí)阻止其他的事務(wù)讀取相同數(shù)據(jù)的排他鎖。排他鎖(X):允許獲得排他鎖的事務(wù)更新數(shù)據(jù),阻止其他事務(wù)取得相同數(shù)據(jù)的共享鎖和排他鎖。意向共享鎖(IS):事務(wù)打算給數(shù)據(jù)行加行共享鎖。事務(wù)在給一個(gè)數(shù)據(jù)行加共享鎖前必須先取得該表的意向共享鎖。意向排他鎖(IX):事務(wù)打算給數(shù)據(jù)行加行排他鎖。事務(wù)在給一個(gè)數(shù)據(jù)行加排他鎖前必須先取得該表意向排他鎖。BYYUSHEN02
數(shù)據(jù)庫(kù)技術(shù)與應(yīng)用5.2.3
鎖機(jī)制任務(wù)二使用事務(wù)和鎖管理并發(fā)控制QUERYDATAINASINGLETABLE1行級(jí)鎖定4種鎖的共存邏輯關(guān)系。鎖模式共享鎖排他鎖意向共享鎖意向排他鎖共享鎖兼容沖突兼容沖突排他鎖沖突沖突沖突沖突意向共享鎖兼容沖突兼容兼容意向排他鎖沖突沖突兼容兼容BYYUSHEN02
數(shù)據(jù)庫(kù)技術(shù)與應(yīng)用5.2.3
鎖機(jī)制任務(wù)二使用事務(wù)和鎖管理并發(fā)控制QUERYDATAINASINGLETABLE2表級(jí)鎖定與行級(jí)鎖不同的是,表級(jí)鎖的鎖定機(jī)制的顆粒度最大,該鎖定機(jī)制的最大特點(diǎn)是系統(tǒng)開銷比較小,由于實(shí)現(xiàn)邏輯非常簡(jiǎn)單,因此帶來的系統(tǒng)負(fù)面影響最小。由于表級(jí)鎖一次性將整個(gè)表鎖定,因此可以很好的避免死鎖的問題。表級(jí)鎖定機(jī)制也存在一定缺陷,由于表級(jí)鎖的鎖定機(jī)制顆粒很大,所以發(fā)生鎖沖突的概率最高,并發(fā)度最低。MySQL數(shù)據(jù)庫(kù)的表級(jí)鎖定主要分為兩種類型,一種是讀鎖定,另一種是寫鎖定。MySQL數(shù)據(jù)庫(kù)提供了以下4種隊(duì)列來維護(hù)這兩種鎖定,間接地說明了數(shù)據(jù)庫(kù)表級(jí)鎖定的4種狀態(tài)。Currentreadlockqueue(lock->read)Paddingreadlockqueue(lock->readwait)Currentwritelockqueue(lock->write)Paddingwritelockqueue(lock->writewait)BYYUSHEN02
數(shù)據(jù)庫(kù)技術(shù)與應(yīng)用5.2.4
MySQL的事務(wù)并發(fā)控制語句任務(wù)二使用事務(wù)和鎖管理并發(fā)控制QUERYDATAINASINGLETABLE不同的事務(wù)隔離級(jí)別下,不同的數(shù)據(jù)操作加鎖也不相同。當(dāng)事務(wù)級(jí)別為未提交時(shí),不加鎖。當(dāng)已提交讀和可重復(fù)讀的事務(wù)隔離級(jí)別下,數(shù)據(jù)的查詢讀操作不加鎖;數(shù)據(jù)的添加、刪除、修改的寫操作都會(huì)加上X排它鎖;該級(jí)別以下的級(jí)別中讀寫不沖突。當(dāng)可序列化事務(wù)隔離級(jí)別下,讀寫沖突,查詢讀操作加S共享鎖,而添加、刪除、修改的寫操作加X排它鎖。BYYUSHEN02
數(shù)據(jù)庫(kù)技術(shù)與應(yīng)用任務(wù)二使用事務(wù)和鎖管理并發(fā)控制QUERYDATAINASINGLETABLEBEGIN|STARTTRANSACTION;1開始事務(wù)在MySQL中,默認(rèn)用戶執(zhí)行的每一條SQL語句都會(huì)被當(dāng)成單獨(dú)的事務(wù)自動(dòng)提交。如果要將一組SQL語句作為一個(gè)事務(wù),則需要使用MySQL事務(wù)控制語句,要先顯式地開啟一個(gè)事務(wù),并手動(dòng)提交該事務(wù)。執(zhí)行開始事務(wù)語句后,標(biāo)記一個(gè)事務(wù)的起始點(diǎn),每一條SQL語句不再自動(dòng)提交。5.2.4
MySQL的事務(wù)并發(fā)控制語句BYYUSHEN02
數(shù)據(jù)庫(kù)技術(shù)與應(yīng)用任務(wù)二使用事務(wù)和鎖管理并發(fā)控制QUERYDATAINASINGLETABLECOMMIT;2提交事務(wù)當(dāng)執(zhí)行了BEGIN或STARTTRANSACTION語句后,用戶需使用COMMIT手動(dòng)提交每一條SQL語句。只有事務(wù)提交后,其中的操作才會(huì)生效。具體地說,COMMIT提交事務(wù)就是將事務(wù)中所有對(duì)數(shù)據(jù)庫(kù)的更新都寫到磁盤上的物理數(shù)據(jù)庫(kù)中,標(biāo)志著一個(gè)事務(wù)的正常結(jié)束。一旦執(zhí)行了該命令,將不能回滾事務(wù)。只有在所有修改都準(zhǔn)備好提交給數(shù)據(jù)庫(kù)時(shí),才執(zhí)行這一操作。5.2.4
MySQL的事務(wù)并發(fā)控制語句BYYUSHEN02
數(shù)據(jù)庫(kù)技術(shù)與應(yīng)用任務(wù)二使用事務(wù)和鎖管理并發(fā)控制QUERYDATAINASINGLETABLEROLLBACK;3回滾(撤銷)事務(wù)
ROLLBACK表示撤銷事務(wù),即在事務(wù)運(yùn)行的過程中發(fā)生了某種故障或錯(cuò)誤,事務(wù)不能繼續(xù)執(zhí)行,系統(tǒng)將事務(wù)中對(duì)數(shù)據(jù)庫(kù)的所有已完成的操作全部撤銷,回滾到事務(wù)起點(diǎn)或指定的保持點(diǎn)處。同時(shí),系統(tǒng)將清除自事務(wù)起點(diǎn)或到某個(gè)保存點(diǎn)所做的所有的數(shù)據(jù)修改,并且釋放由事務(wù)控制的資源。因此,ROLLBACK語句也是標(biāo)志著事務(wù)的結(jié)束。要注意的是,ROLLBACK只能針對(duì)未提交的事務(wù)回滾,已提交的事務(wù)無法回滾。5.2.4
MySQL的事務(wù)并發(fā)控制語句BYYUSHEN02
數(shù)據(jù)庫(kù)技術(shù)與應(yīng)用任務(wù)二使用事務(wù)和鎖管理并發(fā)控制QUERYDATAINASINGLETABLESAVEPOINT保存點(diǎn)名;4事務(wù)保存點(diǎn)在回滾事務(wù)時(shí),事務(wù)內(nèi)所有的操作都將撤銷。若希望只撤銷一部分,
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年度爆炸事故和解賠償及后期修復(fù)服務(wù)合同
- 數(shù)據(jù)科學(xué)在商業(yè)決策中的應(yīng)用作業(yè)指導(dǎo)書
- 農(nóng)業(yè)生產(chǎn)循環(huán)經(jīng)濟(jì)方案
- 一機(jī)簽首批電焊條出口合同
- 五金機(jī)電購(gòu)銷合同
- 農(nóng)民培訓(xùn)教材農(nóng)業(yè)科技知識(shí)普及手冊(cè)
- 商業(yè)策劃實(shí)戰(zhàn)手冊(cè)
- 調(diào)研報(bào)告式公司規(guī)章制度匯編
- 離婚房子給小孩離婚協(xié)議書
- 股權(quán)收購(gòu)協(xié)議書樣式年
- 北京能源集團(tuán)有限責(zé)任公司招聘筆試題庫(kù)2024
- 消防改造期間消防應(yīng)急預(yù)案
- 2024中國(guó)婦科臨床實(shí)踐指南-卵巢癌
- 2024-2030年中國(guó)靶機(jī)行業(yè)市場(chǎng)發(fā)展趨勢(shì)與前景展望戰(zhàn)略分析報(bào)告
- 2024過敏性休克搶救指南(2024)課件干貨分享
- 09BD13建筑物防雷裝置
- 醫(yī)療行業(yè)提高醫(yī)院服務(wù)質(zhì)量的改進(jìn)方案三篇
- 預(yù)應(yīng)力空心方樁打樁工程監(jiān)理實(shí)施細(xì)則
- 飛機(jī)儀電與飛控系統(tǒng)原理智慧樹知到期末考試答案章節(jié)答案2024年中國(guó)人民解放軍海軍航空大學(xué)
- 數(shù)據(jù)分析應(yīng)用項(xiàng)目化教程(Python) 課件 項(xiàng)目1 認(rèn)識(shí)數(shù)據(jù)分析
- JJG(交通) 192-2023 負(fù)壓篩析儀
評(píng)論
0/150
提交評(píng)論