MySQL數據庫基礎與實踐 第2版 課件 CH09 常見函數和數據管理_第1頁
MySQL數據庫基礎與實踐 第2版 課件 CH09 常見函數和數據管理_第2頁
MySQL數據庫基礎與實踐 第2版 課件 CH09 常見函數和數據管理_第3頁
MySQL數據庫基礎與實踐 第2版 課件 CH09 常見函數和數據管理_第4頁
MySQL數據庫基礎與實踐 第2版 課件 CH09 常見函數和數據管理_第5頁
已閱讀5頁,還剩67頁未讀 繼續免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

MySQL數據庫開發與應用9常見函數和數據管理第章本章內容9.1事件概述9.2數據庫備份與還原9.3MySQL的用戶管理9.4案例:數據庫備份與恢復9.5本章總結9.6實踐與練習9.7實驗指導9.1事件概述9.1.1查看事件是否開啟事件由一個特定的線程來管理。啟用事件調度器后,擁有SUPER權限的賬戶執行SHOWPROCESSLIST就可以看到這個線程了,也可以通過對全局變量event_scheduler的查看,掌握事件調度器的狀態,其值為OFF表示關閉,其值為ON表示開啟。查詢事件調度狀態有以下三種方式:1.使用show命令查看event_scheduler例如:SHOWVARIABLESLIKE'event_scheduler';結果為:9.1事件概述2.使用select查看event_scheduler例如:SELECT@@event_scheduler;結果為:9.1事件概述3.查看事件計劃表PROCESSLIST例如:SHOWPROCESSLIST;結果為:這里可以看到有一個event_scheduler事件調度器,如果事件未開啟,則看不到event_scheduler事件調度器。9.1事件概述MySQL數據庫的事件調度器功能默認是開啟的,如果需要手動開啟或關閉事件調度器,可以使用以下命令:SETGLOBALevent_scheduler=ON|OFF|DISABLED;SHOWVARIABLESLIKE'event_scheduler';結果為:9.1事件概述或者在MySQL配置文件my.ini中添加以下行,并重啟MySQL服務:[mysqld]

event_scheduler=ON|OFF|DISABLED結果為:9.1事件概述9.1.3創建事件MySQL事件信息保存在mysql.event表中,雖然可以直接操作該表,但是容易出現不可預知的錯誤,因此建議采用CREATEEVENT語句在指定的數據庫下創建,語法格式如下一頁:9.1事件概述CREATE[DEFINER=user]EVENT[IFNOTEXISTS]event_nameONSCHEDULEschedule[ONCOMPLETION[NOT]PRESERVE][ENABLE|DISABLE|DISABLEONSLAVE][COMMENT'string']DOevent_body;schedule:ATtimestamp[+INTERVALinterval]...|EVERYinterval[STARTStimestamp[+INTERVALinterval]...][ENDStimestamp[+INTERVALinterval]...]interval:quantity{YEAR|QUARTER|MONTH|DAY|HOUR|MINUTE|WEEK|SECOND|YEAR_MONTH|DAY_HOUR|DAY_MINUTE|DAY_SECOND|HOUR_MINUTE|HOUR_SECOND|MINUTE_SECOND}9.1事件概述該語句中event_name是新建事件的名稱,事件名稱必須符合標識符命名規則,且名稱必須唯一。新創建的事件默認屬于當前數據庫,若要在指定數據庫中創建事件,創建時應將名稱指定為db_name.event_name。DEFINER=user是可選選項,用于定義事件創建者,省略表示當前用戶。IFNOTEXISTS是可選選項。添加該選項,表示指定的事件不存在時執行創建事件操作,否則忽略此操作。ONSCHEDULEschedule表示觸發點,用于定義執行的時間和時間間隔,包括2種選項:ATtimestamp一般只執行一次,timestamp用于指定具體時間,interval關鍵字可以用于計算時間間隔,可以直接與日期、時間進行計算;EVERYinterval一般周期性執行,STARTStimestamp是可選項,用于設定開始時間,ENDStimestamp是可選選項,用于設定結束時間。9.1事件概述ONCOMPLETION[NOT]PRESERVE是可選選項,用于定義事件執行完畢是否保留,默認為NOTPRESERVE不保留,即刪除事件。ENABLE|DISABLE|DISABLEONSLAVE是可選選項,用于指定事件的屬性,包括3種選項:ENABLE表示該事件創建以后是開啟的,也就是系統將執行這個事件,為默認選項;DISABLE表示該事件創建以后是關閉的,也就是事件的聲明存儲到目錄中,但是不執行這個事件;DISABLEONSLAVE表示事件在從機中是關閉的。一般用不上,只有設置了MySQL主從數據庫才會用得上,指該事件已在主服務器上創建并復制到從屬服務器,但在從屬服務器上是關閉的。COMMENT'comment'是可選選項,用于定義事件的注釋。DOevent_body用于指定事件啟動時所要執行的代碼,可以是任何有效的SQL語句、存儲過程或一個計劃執行的事件。如果包含多條語句,可以使用BEGIN…END復合結構。9.1事件概述【例9-1】自定義事件的創建。1.創建了一個名為myEvent的事件,在當前時間(CURRENT_TIMESTAMP)累加1分鐘后,執行一次更新操作,將第8章的hibernatedemo.t_student表中所有學生的年齡加1,SQL語句為:CREATEEVENTmyEventONSCHEDULEATCURRENT_TIMESTAMP+INTERVAL1MINUTEDOUPDATEhibernatedemo.t_studentSETage=age+1;結果為:9.1事件概述9.1事件概述2.創建了一個名為backup_database的事件,每天凌晨1點對hibernatedemo數據庫進行備份操作,SQL語句為:usehibernatedemo;delimiter//CREATEEVENTbackup_databaseONSCHEDULEEVERY1DAYSTARTSDATE_ADD(CURDATE(),INTERVAL1DAY)DOBEGINSET@backup_command=CONCAT('mysqldump-uroot-password123456hibernatedemo>d:\test.sql',DATE_FORMAT(NOW(),'%Y%m%d%H%i%s'),'.sql');PREPAREstmtFROM@backup_command;EXECUTEstmt;DEALLOCATEPREPAREstmt;END;//結果為:9.1事件概述9.1事件概述9.1.4查看事件MySQL中的事件存儲在information_schema.EVENTS表中,可以通過查詢命令獲取事件表中全部事件,也可以查看特定數據中事件?!纠?-2】自定義事件的查看。1.創建了一個名為myEvent的事件,在當前時間(CURRENT_TIMESTAMP)累加1天后,執行一次更新操作。SQL語句為:CREATEEVENTmyEventONSCHEDULEATCURRENT_TIMESTAMP+INTERVAL1DAYDOUPDATEhibernatedemo.t_studentSETage=age+1;SELECTEVENT_SCHEMAas'數據庫',EVENT_NAMEas'事件名',EXECUTE_ATas'執行時間',STATUSas'狀態',EVENT_DEFINITIONas'事件定義'FROMinformation_schema.EVENTS;結果為:9.1事件概述9.1事件概述2.通過showEVENTS\G獲取當前數據庫中事件列表,其中,\G是一個可選的參數。使用\G參數可以將結果以更易讀的方式顯示,每個屬性占據一行,方便閱讀和解析,語法格式如下:usehibernatedemo;showEVENTS\G結果為:9.1事件概述3.通過showCREATEEVENTevent_name獲取當前事件完整的創建信息。語法格式如下:showCREATEEVENTSmyEvent\G結果為:9.1事件概述9.1.5修改事件1.在MySQL8中,修改事件(Event)通常是指調整事件的定時策略或者是對事件的狀態進行更改。語法格式如下:ALTEREVENTevent_nameONSCHEDULEscheduleENABLE|DISABLE;其中schedule格式為:schedule:ATtimestamp[+INTERVALinterval]...|EVERYinterval[STARTStimestamp[+INTERVALinterval]...][ENDStimestamp[+INTERVALinterval]...]ONSCHEDULEschedule與創建事件相同,表示觸發點,用于定義執行的時間和時間間隔,包括2種選項:ATtimestamp一般只執行一次,timestamp用于指定具體時間,interval關鍵字可以用于計算時間間隔,可以直接與日期、時間進行計算;EVERYinterval一般周期性執行,STARTStimestamp是可選項,用于設定開始時間,ENDStimestamp是可選選項,用于設定結束時間。9.1事件概述【例9-3】修改事件的狀態或定時策略。1.創建一天后執行的事件,將事件狀態修改為DISABLE。SQL語句為:CREATEEVENTmyEventONSCHEDULEATCURRENT_TIMESTAMP+INTERVAL1DAYDOUPDATEhibernatedemo.t_studentSETage=age+1;ALTEREVENTmyEventDISABLE;showEVENTS\G結果為:9.1事件概述2.修改事件的定時策略,將事件執行周期改為每天執行一次,從當前時間開始執行,同時修改事件狀態改為ENABLE。SQL語句如下:ALTEREVENTmyEventONSCHEDULEEVERY1DAYSTARTSCURRENT_TIMESTAMPENABLE;showCREATEEVENTmyEvent\G結果為:9.1事件概述3.修改事件的執行順序MySQL中的事件調度器(EventScheduler)允許你創建定時任務,但是事件的執行順序并不是由創建時間決定的,而是由它們的間隔和上一次執行的時間決定的。如果想要改變事件的執行順序,需要先停止事件,然后根據新的執行順序調整它們的間隔和開始時間。SQL語句如下:ALTEREVENTmyEventONSCHEDULEEVERY1DAYSTARTSCURRENT_TIMESTAMP+INTERVAL1DAY在執行這些操作之前,確保有足夠的權限來修改事件,并且修改事件可能會影響到已經安排好的事件執行計劃。9.1事件概述9.1.6刪除事件事件表中包含所有未完成事件,包括數據庫名、事件名、創建者、執行時間、時間間隔、開始時間、結束時間等,如果事件已經執行結束,會自動從事件表中移除,也可使用drop命令手動刪除事件。【例9-3】刪除指定名稱的事件。刪除myEvent事件,SQL語句如下:dropEVENTmyEvent;showEVENTS;結果為:9.2數據庫備份與還原數據是數據庫管理系統的核心,為了避免數據丟失,或者發生數據丟失后將損失降到最低,需要定期對數據庫進行備份,如果數據庫中的數據出現了錯誤,需要使用備份好的數據進行數據還原,數據的還原是以備份為基礎的。9.2.1數據的備份為了保證數據庫的可靠性和完整性,數據庫管理系統通常會采取各種有效的措施進行維護,但是在數據庫的使用過程中,還是可能由于多種原因,比如計算機硬件故障、計算機軟件故障、病毒、人為誤操作、自然災害以及盜竊等,而造成數據丟棄或者被破壞。因此,數據庫系統提供了備份和恢復策略來保證數據庫中數據的安全性。9.2數據庫備份與還原(1)使用SQL語句備份用戶可以使用selectinto…outfile語句把表數據導出到一個文本文件中,并使用loaddata…infile語句恢復數據。但是該方法只能導出或導入數據內容,不包括表的結構,如果表的結果文件損壞,則必須先恢復原來的表的結構。例如:select*intooutfile’file_name’export_options|dumpfile’file_name’9.2數據庫備份與還原(1)使用SQL語句備份用戶可以使用selectinto…outfile語句把表數據導出到一個文本文件中,并使用loaddata…infile語句恢復數據。但是該方法只能導出或導入數據內容,不包括表的結構,如果表的結果文件損壞,則必須先恢復原來的表的結構。例如:select*intooutfile’file_name’export_options|dumpfile’file_name’9.2數據庫備份與還原(1)使用SQL語句備份使用outfile時,可以在export_opitions中加入以下兩個自選的子句,來決定數據行在文件中存放的格式:fields子句:在fields子句中有三個亞子句,terminatedby、[optionally]enclosedby、escapedby。如果指定了fields子句,那么三個亞子句中至少要指定一個。terminatedby用來指定字段值之間的符號;enclosedby子句用來指定包裹文件中字符值的符號;escapedby子句用來指定轉義字符。lines子句:在lines子句中使用terminatedby指定一行結束的標志。9.2數據庫備份與還原(2)使用命令mysqldump備份MySQL提供了許多免費的客戶端實用程序,存放在MySQL安裝目錄下的bin子目錄中。這些客戶端實用程序可以連接到MySQL服務器進行數據庫的訪問,或者對MySQL進行不同的管理任務,其中mysqldump程序常用于實現數據庫的備份。使用客戶端方法:打開計算機中的DOS終端,進入MySQL安裝目錄下的bin子目錄C:\ProgramFiles\MySQL\MySQLServer5.0\bin,出現MySQL客戶端實用程序運行界面,如圖9-1所示,由此可輸入所需的MySQL客戶端實用程序的命令。

可以使用MySQL客戶端實用程序mysqldump來實現mysql數據庫的備份,這樣的備份方式比用SQL語句備份能達到既備份文件,也同時備份表結構的目的。9.2數據庫備份與還原(2)使用命令mysqldump備份備份表語法格式如下:mysqldump[options]database[tables]>filename;說明:options:mysqldump命令支持的選項,可以通過執行mysqldump—help命令得到mysqldump選項表及更多幫助信息。database:指定數據庫的名稱,其后可以加上需要備份的表名。如果在命令中沒有指定表名,則該命令會備份整個數據庫。filename:指定最終備份的文件名,如果該命令語句中指定了需要備份的多個表,那么備份后都會保存在這個文件中。9.2數據庫備份與還原(2)使用命令mysqldump備份備份數據庫mysqldump應用程序還可以將一個或多個數據庫備份到已知文件中,語法格式如下:mysqldump[options]--databases[options]db1[db2db3…]>filename;【例9-6】使用mysqldump備份數據庫test和數據庫MySQL到C盤backup目錄下。mysqldump-hlocalhost-uroot-p123456-databasestestMySQL>c:\backup\data.sql;命令執行完成后,會在指定的目錄c:\backup下生成一個包含兩個數據庫test和MySQL和備份文件data.sql,文件中存儲了創建這兩個數據庫及其內部數據表的全部SQL語句,以及兩個數據庫中所有的數據。9.2數據庫備份與還原(2)使用命令mysqldump備份備份數據庫系統mysqldump程序還能夠備份整個數據庫系統,語法格式如下:mysqldump[options]-all-databases[options]>filename;【例9-7】使用mysqldump備份MySQL服務器上所有數據庫。mysqldump-uroot-p123456-all-databases>c:\backup\alldata.sql;【例9-8】使用mysqldump將test數據庫中所有表的表結構和數據都分別備份到D盤file文件夾下。mysqldump-uroot-p123456--tab=D:/file/test;9.2.2數據的還原

數據庫的恢復也稱為數據庫的還原,是將數據庫從某種“錯誤”狀態恢復到某一已知的“正確”狀態。數據庫的恢復是以備份為基礎的,與備份相對應的系統維護和管理操作。系統進行恢復操作時,先執行一些系統安全的檢查,包括檢查所要恢復的數據庫是否存在、數據庫是否變化以及數據庫文件是否兼容等,然后根據所采用的數據庫備份類型采取相應的恢復操作。9.2.2數據的還原(1)使用SQL語句恢復用戶可以使用loaddata…infile語句把一個文件中的數據導入到數據庫中。語法格式如下:loaddata[low_priority|concurrent][local]infile’file_name.txt’[replace|ignore]Intotabletb_name[fields[terminatedby’string’][[optionally]enclosedby’char’][escapedby‘char’]][lines[startingby’string’][terminatedby‘string’]][ignorenumberlines][(col_name_or_user_var,…)]][lgnorenumberlines][(col_name_or_user_var,…)][set(col_name=expr,…)]9.2.2數據的還原(1)使用SQL語句恢復說明:file_name:等待載入的文件名,文件中保存了待存入數據庫的數據行。輸入文件可以手動創建,也可以使用其他的程序創建。載入文件時候當指定了文件的絕對路徑時,服務器根據該路徑搜索文件,如果不指定路徑,服務器則會在默認數據庫的數據庫目錄中讀取。tb_name:需要導入數據的表名,該表在數據庫中必須存在,表結構必須與導入文件的數據行一致。replace|ignore:如果指定了replace,那么當文件中出現于原有行相同的唯一關鍵字時,輸入行會替換原有行。如果指定了ignore,則把原有行有相同的唯一關鍵字值的輸入行跳過。9.2.2數據的還原(1)使用SQL語句恢復說明:fields子句:此處的fields子句和ooutfile語句中類似,用于判斷字段之間和數據行之間的符號。lines子句:terminatedby亞子句用來指定一行結束的標志。Staringby亞子句指定已給前綴,導入數據行時候,忽略行中的該前綴和前綴之前的內容。如果某行不包括該前綴,你們整行被跳過。ignorenumberlines:這個選項可以用于忽略文件的前幾行。col_name_or_user_var:如果需要載入一個表的部分列或文件中字段值順序與表中列的順序不同,則需要指定一個列清單,其中可以包含列名或者用戶變量。set子句:set子句可以在導入數據時候修改表中列的值。9.2.2數據的還原(1)使用SQL語句恢復說明:fields子句:此處的fields子句和ooutfile語句中類似,用于判斷字段之間和數據行之間的符號。lines子句:terminatedby亞子句用來指定一行結束的標志。Staringby亞子句指定已給前綴,導入數據行時候,忽略行中的該前綴和前綴之前的內容。如果某行不包括該前綴,你們整行被跳過。ignorenumberlines:這個選項可以用于忽略文件的前幾行。col_name_or_user_var:如果需要載入一個表的部分列或文件中字段值順序與表中列的順序不同,則需要指定一個列清單,其中可以包含列名或者用戶變量。set子句:set子句可以在導入數據時候修改表中列的值。9.2.2數據的還原(2)使用命令mysqldump恢復數據可以使用MySQL命令將mysqldump程序備份的文件中的全部SQL語句還原到MySQL中?!纠?-9】假設數據庫test損壞,請使用該數據庫的備份文件test.sql將其恢復。mysql-uroot-p123456test<test.sql;【例9-10】假設數據庫test中course表結構損壞,備份文件存放在D盤file目錄下,現需要將包含course表結構的.sql文件恢復到服務器中。mysql-uroot-p123456test<D:/file/course.sql;9.2.2數據的還原(3)使用命令mysqlimport恢復數據使用命令mysqlimpor恢復數據的語法格式如下:mysqlimpor[options]databasefilename【例9-11】使用存放在c盤backup目錄下的備份數據文件course.txt,恢復數據庫text中表course的數據。

mysqlimpor-hlocalhost-uroot-p123456-low-priority-replacetest<c:\backup\course.txt;9.3MySQL的用戶管理9.3.1數據庫用戶管理

為了保證數據庫的安全MySQL數據庫提供了完善的管理機制和操作手段,MySQL數據庫中的用戶分為普通用戶和root用戶,用戶類型不同,其具體的權限也不同,root用戶是超級管理員,擁有所有的權限;普通用戶只能擁有創建用戶時賦予它的權限。9.3MySQL的用戶管理9.3.1數據庫用戶管理MySQL用戶賬號和信息存儲在名為mysql的數據庫中,這個數據庫中有一個名為user的數據表,包含所有用戶的賬號,該數據庫用一個名為user的列存儲用戶的登錄名。1.添加用戶系統新安裝時,當前只有一個名為root的用戶,該用戶是在成功安裝MySQL服務器后,由系統創建的,并且被賦予了操作和管理MySQL的所有權限。因此,root用戶具有對整個MySQL服務器完全控制的權限。為了避免惡意用戶冒名使用root賬號操控數據庫,通常需要創建一系列具備適當權限的賬號,盡可能地不用或者少用root賬號登錄系統,以便確保數據的安全訪問,因此,對MySQL管理時需要對用戶賬號進行管理。9.3MySQL的用戶管理9.3.1數據庫用戶管理(1)使用createuser語句創建用戶賬戶可以使用createuser語句創建一個或者多個MySQL賬戶,并設置密碼,語法格式如下:CREATEUSER’user_name’@’hostname’IDENTIFIEDBY'password';user_name:是用戶名hostname:是主機名,即用戶連接MySQL時所在主機的名字。如果在創建的過程中只給出了賬號中的用戶名,而沒有指定主機名,那么主機名會默認為是“%”,表示一組主機。IDENTIFIEDBY子句:用于指定用戶賬號對應的口令,如果該用戶賬號無口令,那么可以省略該句。9.3MySQL的用戶管理CREATEUSER’user_name’@’hostname’IDENTIFIEDBY'password';user_name:是用戶名hostname:是主機名,即用戶連接MySQL時所在主機的名字。如果在創建的過程中只給出了賬號中的用戶名,而沒有指定主機名,那么主機名會默認為是“%”,表示一組主機。IDENTIFIEDBY子句:用于指定用戶賬號對應的口令,如果該用戶賬號無口令,那么可以省略該句。9.3MySQL的用戶管理注意:在用戶名的后面聲明了關鍵字localhost,該關鍵字指定了用戶創建的使用MySQL的連接所來自的主機。如果一個用戶名和主機名中包含特殊符號例如“-”,或者通配符例如“%”,那么需要用單引號將其括起來。“%”表示一組主機。使用create語句,必須擁有MySQL中MySQL數據庫的insert權限或者全局createuser權限;使用createuser語句創建一個用戶賬號后,會在系統自身的MySQL數據庫的user表添加一條新記錄。如果創建的賬戶已經存在,那么語句執行會出現錯誤;如果兩個用戶具有相同的用戶名和不同的主機名,MySQL將視為不同的用戶,并允許為這兩個用戶分配不同的權限集合;如果createuser語句的使用中,沒有為用戶指定口令,那么MySQL允許該用戶可以不使用口令登錄系統,但是從安全的角度出發不推薦這樣做;新創建的用戶擁有的權限很少,他們可以登錄到MySQL,只允許進行不需要權限的操作,如,使用show語句查詢所有存儲引擎和字符集的列表等,不能使用use語句來讓其他用戶已經創建的任何數據庫成為當前數據庫。9.3MySQL的用戶管理2.查看用戶查看用戶的語法格式如下:select*frommysql.userwherehost=’host_name’anduser=’user_name’其中,“*”代表MySQL數據庫中user表的所有列,也可以指定特定的列。常用的列名有:hostt、user、authentication_string、select_priv、index_priv等。MySQL8使用authentication_string替代password字段。where后緊跟的是查詢條件?!纠?-12】查看本地主機上的所有用戶名selecthost,user,authentication_stringfrommysql.user;結果為:9.3MySQL的用戶管理3.修改用戶賬號使用renameuser語句修改一個或者多個已經存在的MySQL用戶賬號,如果系統中就賬戶不存在或者新賬戶已經存在,你們語句執行會出現錯誤。需要使用renameuser語句,必須擁有MySQL中MySQL數據庫的update權限或者全局createuser權限。語法格式如下:renameuserold_usertonew_user[,old_usertonew_user]…old_user:系統中已經存在的MySQL用戶賬號。New_user:新的MySQL用戶賬號。9.3MySQL的用戶管理3.修改用戶賬號【例9-13】將前面例子中國用戶king的名字修改成queenrenameuser’king’@’localhost’to’queen’@’localhost’;結果為:9.3MySQL的用戶管理4.修改用戶口令MySQL8之后推薦ALTERUSER語句來修改密碼,語法規則如下:ALTERUSER'username'@'localhost'IDENTIFIEDBY'new_password';9.3MySQL的用戶管理5.刪除用戶使用dropuser語句可以刪除普通用戶,dropuser語句刪除用戶必須有dropuser權限,語法規則如下:dropuseruser[,user]…其中,user參數是需要刪除的用戶,由用戶名和主機組成。dropuser語句可以同時刪除多個用戶,各個用戶用逗號隔開。【例9-15】刪除queen用戶,主機名為localhost。dropuser‘queen’@’localhost’;結果為:9.3MySQL的用戶管理9.3.2用戶權限設置(1)權限授予新建的SQL用戶不允許訪問屬于其他SQL用戶的表,也不能立即創建自己的表,必須被授權??梢允谟璧臋嘞拗饕校毫袡嘞蓿汉捅碇械囊粋€具體列相關。表權限:和一個具體表中國的所有數據相關。數據庫權限:和一個具體的數據庫中所有表相關。用戶權限:和MySQL所有的數據庫相關。給予用戶授權可以使用grant語句,語法格式如下:grantpriv_type[(column_list)][,priv_type[(column_list)]]…on[object_type]priv_leveltouser_specification[,user_specification]…[withwith_option…]9.3MySQL的用戶管理說明:priv_type:用于指定權限的名稱,例如,select、update、delete等數據庫操作。column_list:用于指定權限要授予該表中哪些具體的列。on子句:用于指定權限授予的對象和級別,例如,可以在on關鍵字后面給出要授予權限的數據庫名或者表名等。object_type:可選項,用于指定權限授予的對象類型,包括表、函數和存儲過程,分別用關鍵字table、function、procedure標識。priv_level:用于指定權限的級別。to子句:用來設定用戶的口令,以及制定被授予權限的用戶user。如果在to子句中給系統中存在的用戶指定口令,那么新密碼會將原密碼覆蓋;如果權限被授予給一個不存在的用戶,MySQL會自動執行一條createuser語句來創建這個用戶,但是同時必須為該用戶指定口令。user_specification:to子句中的具體描述部分,其與createuser語句中的user_specification部分一樣。with子句:grant語句的最后可以使用with子句,為可選項,用于實現權限的轉移或者限制。9.3MySQL的用戶管理授予表權限和列權限【例9-15】授予用戶king在course表上的select權限。usetest;grantselectoncoursetoking@localhost;【例9-16】用戶liu和qu不存在,授予它們在course表上的select和update權限。grantselect,updateoncoursetoliu@localhostidentifiedby’lpwd’,qu@localhostidentifiedby’zpwd’;如果權限授予了一個不存在的用戶,MySQL會自動執行一條createuser語句來創建這個用戶,但必須為該用戶指定密碼。9.3MySQL的用戶管理【例9-17】授予king在course表上的學號列和姓名列的update權限。grantupdate(姓名,學號)oncoursetoking@localhost;授予數據庫權限表權限適用于一個特定的表,MySQL還支持針對整個數據庫的權限。例如,在一個特定的數據庫中創建表和視圖的權限。【例9-18】授予king在test數據庫中的所有表的select權限。grantselectontest.*toking@localhost;9.3MySQL的用戶管理授予用戶權限最有效率的權限就是授予用戶權限,對于需要授予數據庫權限的所有語句,也可以定義在用戶權限上。例如在用戶級別上授予某人create權限,該用戶可以創建一個新的數據庫,也可以在所有的數據庫中創建新表。MySQL授予用戶權限時priv_type可以是以下值:createuser:給予用戶創建和刪除新用戶的權力。showdatabases:給予用戶使用showdatabases語句查看所有已有的數據庫的定義的權力。在grant語法格式中,授予用戶權限時on子句中使用“*.*”,表示所有數據庫的所有表?!纠?-19】授予Linda創建新用戶的權力。grantcreateuseron*.*toLinda@localhost;9.3MySQL的用戶管理(2)權限的轉移和限制轉移權限如果將with子句指定為withgrantoption,那么表示to子句中所指定的所有用戶都具有把自己所擁有的權限授予其他用戶的權力,而無論那些其他用戶是否擁有該權限。【例9-19】授予當前系統中一個不存在的用戶qu在數據庫test的表course上擁有select和update的權限,并允許它可以將在自身的這個權限授予其他用戶。grantselect,updateontest.courseto‘qu’@’localhost’identifiedby’abc’withgrantoption;9.3MySQL的用戶管理限制權限【例9-20】授予系統中的用戶qu在數據庫test的表course上每小時只能處理一條delete語句的權限。grantdeleteontest.courseto‘qu’@’localhost’withmax_queries_per_hour1;9.3MySQL的用戶管理(3)權限的撤銷當需要撤銷一個用戶的權限,但不從user表中刪除該用戶,可以使用revoke語句,語法格式如下:revokepriv_type[(column_list)][,priv_type[(column_list)]]…on[object_type]priv_levelfromuser[,user]…或者revokeallprivieges,grantoptionfromuser[,user]…說明:Revoke語句和grant語句的語法格式相似,但是具有相反的效果。第一種語法格式用于回收某些特定的權限;第二種語法用于回收特定用戶的所有權限;如果要使用revoke語句,必須擁有MySQL數據庫的全局createuser權限或者update權限。9.4案例:數據庫備份與恢復案例要求有數據庫初始化腳本如下(main.sql):

#為了測試第五章各個語句內容,創建該sql文件,用于創建目標數據庫與部分表dropdatabaseifexistsstudent_info;createdatabasestudent_info;usestudent_info;#創建老師表createtableteacher( tnovarchar(20)notnull, tnamevarchar(20)notnull, ttelvarchar(20)notnull);9.4案例:數據庫備份與恢復#創建學生表createtablestudent( snointnotnullAUTO_INCREMENTPRIMARYKEY, snamevarchar(20)notnull, ssexvarchar(2)notnull, sageintnotnull, infvarchar(225)defaultnull);#創建選修表createtablesc( snointnotnull, cnointnotnull, gradefloatdefault0, stimedatetimenotnull);9.4案例:數據庫備份與恢復#創建課程表createtablecourse( cnointnotnullAUTO_INCREMENTPRIMARYKEY, cnamevarchar(20)notnull, up_limitintdefault0, infvarchar(225)notnull, statevarchar(20)notnull, semeste

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論