




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、MySQLMySQL數據庫基礎與實例教程數據庫基礎與實例教程 之之視圖觸發(fā)器視圖觸發(fā)器1 12 23 3 本章首先講解了本章首先講解了視圖以及觸發(fā)器的視圖以及觸發(fā)器的管理及使用,然后管理及使用,然后結合結合“選課系統(tǒng)選課系統(tǒng)”分別介紹視圖以及分別介紹視圖以及觸發(fā)器在該系統(tǒng)中觸發(fā)器在該系統(tǒng)中的應用。的應用。 4 4觸發(fā)器觸發(fā)器視圖視圖臨時表臨時表派生表(派生表(Derived Table)5 5視圖、子查詢、臨時表、派生表視圖、子查詢、臨時表、派生表內容一覽內容一覽 作業(yè) P213 1、2、3(檢查視圖)、4、6。 復習 1、2、3(重點第3章) 視圖與表有很多相似視圖與表有很多相似的地方,的地
2、方,視圖也是由若視圖也是由若干個字段以及若干條記干個字段以及若干條記錄構成,視圖也可以作錄構成,視圖也可以作為為select語句的數據源。語句的數據源。甚至在某些特定條件下,甚至在某些特定條件下,可以通過視圖對表進行可以通過視圖對表進行更新操作。更新操作。7.1 7.1 視圖視圖1 12 23 3 視圖中保存的僅僅視圖中保存的僅僅是一條是一條select語句,語句,視圖中的源數據都來視圖中的源數據都來自于數據庫表,數據自于數據庫表,數據庫表稱為基本表或者庫表稱為基本表或者基表,視圖稱為基表,視圖稱為。 查看視圖的定義查看視圖的定義創(chuàng)建視圖創(chuàng)建視圖視圖在視圖在“選課系統(tǒng)選課系統(tǒng)”中的應用中的應用
3、45視圖的作用視圖的作用刪除視圖刪除視圖7.1 7.1 視圖視圖6 67 7 視圖中保存的僅僅視圖中保存的僅僅是一條是一條select語句,語句,視圖中的源數據都來視圖中的源數據都來自于數據庫表,數據自于數據庫表,數據庫表稱為基本表或者庫表稱為基本表或者基表,視圖稱為虛表?;?,視圖稱為虛表。 檢查視圖檢查視圖local與與cascade檢查視圖檢查視圖7.1 7.1 視圖視圖創(chuàng)建視圖的語法格式如下。創(chuàng)建視圖的語法格式如下。create view 視圖名視圖名 (視圖字段列表視圖字段列表) asselect語句語句對于經常使用的、結構復雜的對于經常使用的、結構復雜的select語句,語句,建議
4、將其封裝為視圖建議將其封裝為視圖 ”.簡化數據查詢操作。簡化數據查詢操作。7.1.1 7.1.1 創(chuàng)建視圖創(chuàng)建視圖7.1.1 創(chuàng)建視圖 視圖視圖(view)為數據查詢提供了一條捷徑為數據查詢提供了一條捷徑,簡化數簡化數據查詢操作據查詢操作. 創(chuàng)建所有班級的學生情況視圖 create view v1_view AS select classes1.class_no,class_name,department_name,student_no,student_name from student1 right join classes1 on student1.class_no=classes1.cl
5、ass_no; select * from v1_view where class_no=1; select * from v1_view where class_no=2;任務布置任務布置1: “對于經常使用的、結構復雜的對于經常使用的、結構復雜的select語句,建議將其封裝為視圖語句,建議將其封裝為視圖 ”。例如:為統(tǒng)計每門課程還能供多少同學選修,例如:為統(tǒng)計每門課程還能供多少同學選修,定義名為定義名為 available_course_view的視圖。的視圖。7.1.1 7.1.1 創(chuàng)建視圖創(chuàng)建視圖create view available_course_viewASselect co
6、urse.course_no,course_name,teacher_name,up_limit,count(*) as student_num,up_limit-count(*) as availablefrom teacher inner join courseon teacher.teacher_no=course.teacher_noinner join chooseon choose.course_no=course.course_nogroup by course.course_no;Select * from available_course_view;可以使用下面可以使用下面四
7、種方法查看視圖的定義四種方法查看視圖的定義。 1在在choose數據庫中成功地創(chuàng)建了視圖數據庫中成功地創(chuàng)建了視圖available_course_view后,該視圖的定義默后,該視圖的定義默認保存在數據庫目錄(例如認保存在數據庫目錄(例如choose目錄)下,目錄)下,文件名為文件名為available_course_view.frm。使用。使用記事本打開該文件,即可查看該視圖的定義。記事本打開該文件,即可查看該視圖的定義。7.1.2 7.1.2 查看視圖的定義查看視圖的定義可以使用下面四種方法查看視圖的定義??梢允褂孟旅嫠姆N方法查看視圖的定義。 2視圖是一個虛表,也可以使用查看表結構視圖是一
8、個虛表,也可以使用查看表結構的方式查看視圖的定義的方式查看視圖的定義 desc v1_view。 3MySQL命令命令“show tables;”命令不僅顯命令不僅顯示當前數據庫中所有的基表,也會將所有的示當前數據庫中所有的基表,也會將所有的視圖羅列出來。視圖羅列出來。7.1.2 7.1.2 查看視圖的定義查看視圖的定義可以使用下面四種方法查看視圖的定義。可以使用下面四種方法查看視圖的定義。 4MySQL系統(tǒng)數據庫系統(tǒng)數據庫information_schema的的views表存儲了所有視圖的定義,使用下面表存儲了所有視圖的定義,使用下面的的select語句查詢該表的所有記錄,也可以語句查詢該表
9、的所有記錄,也可以查看所有視圖的詳細信息。查看所有視圖的詳細信息。select * from information_schema.viewsG7.1.2 7.1.2 查看視圖的定義查看視圖的定義原來的原來的course表的結構表的結構: dese course;從現在開始,新課程從現在開始,新課程course表中比原來的課程表中比原來的課程course表表多了一個多了一個“剩余的學生名剩余的學生名額額”available字段。字段。任務布置任務布置2:上機操作,完成本書:上機操作,完成本書場景描述場景描述2的的任務要求。任務要求。7.1.3 7.1.3 視圖在視圖在“選課系統(tǒng)選課系統(tǒng)”中的應
10、用中的應用7.1.3 視圖在“選課系統(tǒng)”中的應用 1、設置available字段的默認值。 alter table course add available int default 0; 2、查詢新課程course表的信息 desc course;select course_no,course_name,up_limit,available from course;7.1.3 視圖在“選課系統(tǒng)”中的應用 3、從視圖中獲取信息修改原表的數據從視圖中獲取信息修改原表的數據. update course set available=up_limit- (select student_num from
11、 available_course_view where course_no=course.course_no); 4、查詢course表的信息 select course_no,course_name,up_limit,available from course;1使操作變得簡單使操作變得簡單2避免數據冗余避免數據冗余3增強數據安全性增強數據安全性4提高數據的邏輯獨立性提高數據的邏輯獨立性7.1.4 7.1.4 視圖的作用視圖的作用如果某個視圖不再使用,可以使用如果某個視圖不再使用,可以使用drop view語句將該視圖刪除,語法格式如下。語句將該視圖刪除,語法格式如下。drop view
12、視圖名視圖名7.1.5 7.1.5 刪除視圖刪除視圖視圖分為普通視圖與檢查視圖視圖分為普通視圖與檢查視圖,沒有使用沒有使用with check optiom子句的視圖都是普通試圖子句的視圖都是普通試圖。 通過檢查視圖更新基表數據時,只有滿足通過檢查視圖更新基表數據時,只有滿足檢查條件的更新語句才能成功執(zhí)行。創(chuàng)建檢檢查條件的更新語句才能成功執(zhí)行。創(chuàng)建檢查視圖的語法格式如下。查視圖的語法格式如下。create view 視圖名視圖名 (視圖字段列表視圖字段列表) asselect語句語句with local | cascaded check option7.1.6 7.1.6 檢查視圖檢查視圖任務
13、布置任務布置3:上機操作,完成本書:上機操作,完成本書場景描述場景描述3:普通視圖與更新操作普通視圖與更新操作的任務要求。的任務要求。 創(chuàng)建成績不及格的選修試圖創(chuàng)建成績不及格的選修試圖choose_1_view create view choose_1_view as select * from choose where score60;7.1.6 7.1.6 檢查視圖檢查視圖一、插入數據一、插入數據 insert into choose_1_view values null,2012003,2,100,now(); select * from choose; Select * from ch
14、oose_1_view;二、刪除數據二、刪除數據 delete from choose where student_no=2012003 and course_no=2; Select * from choose; Select * from choose_1_view; 普通視圖不具備普通視圖不具備”檢查檢查”功能功能.7.1.6 檢查視圖 任務布置4:上機操作,完成本書場景描述4: 檢查視圖與更新操作的任務要求。 創(chuàng)建成績不及格的選修試圖choose_2_view create view choose_2_view as select * from choose where score60
15、 with local check option; insert into choose_2_view values (null,2012004,2,100,now(); 然后分析普通視圖與檢查視圖之間的區(qū)別。 定義的格式不同. 更新基表數據時,檢查視圖對檢查數據先檢查,而后更新,不滿足檢查視圖定義的檢查條件,則更新失敗。而普通視圖不具備“檢查”功能。如:p 213-3 create view choose_3_view as select * from choose where score between 0 and 100 with local check option; insert i
16、nto choose_3_view values (null,2012005,2,110,now(); insert into choose_3_view values (null,2012005,2,-12,now(); insert into choose_3_view values (null,2012005,2,98,now();select * from choose;select * from choose_3_view;檢查視圖分為檢查視圖分為local檢查視圖與檢查視圖與cascade檢查檢查視圖。視圖。with_check_option的值為的值為1時表示時表示local(l
17、ocal視圖),視圖),值為值為2時表示時表示cascade(級聯視圖,在視圖的(級聯視圖,在視圖的基礎上再次創(chuàng)建另一個視圖)。基礎上再次創(chuàng)建另一個視圖)。7.1.6 local7.1.6 local與與cascadecascade檢查視圖檢查視圖local 檢查檢查視圖與視圖與cascade檢檢查視圖查視圖7.1.6 local7.1.6 local與與cascadecascade檢查視圖檢查視圖1 12 23 3觸發(fā)器主要用于監(jiān)視某觸發(fā)器主要用于監(jiān)視某個表的個表的insert、update以及以及delete等更新操作,等更新操作,這些操作可以分別激活這些操作可以分別激活該表的該表的ins
18、ert、update或者或者delete類型的觸發(fā)類型的觸發(fā)程序運行,從而實現數程序運行,從而實現數據的自動維護。據的自動維護。 使用觸發(fā)器實現檢查約束使用觸發(fā)器實現檢查約束準備工作準備工作使用觸發(fā)器維護冗余數據使用觸發(fā)器維護冗余數據45使用觸發(fā)器模擬外鍵級聯選項使用觸發(fā)器模擬外鍵級聯選項查看觸發(fā)器的定義查看觸發(fā)器的定義7.2 7.2 觸發(fā)器觸發(fā)器6 67 7觸發(fā)器主要用于監(jiān)視某觸發(fā)器主要用于監(jiān)視某個表的個表的insert、update以及以及delete等更新操作,等更新操作,這些操作可以分別激活這些操作可以分別激活該表的該表的insert、update或者或者delete類型的觸發(fā)程類型的
19、觸發(fā)程序運行,從而實現數據序運行,從而實現數據的自動維護。的自動維護。 刪除觸發(fā)器刪除觸發(fā)器使用觸發(fā)器的注意事項使用觸發(fā)器的注意事項7.2 7.2 觸發(fā)器觸發(fā)器7.2 7.2 觸發(fā)器觸發(fā)器使用使用create trigger語句可以創(chuàng)建一個觸發(fā)器,語句可以創(chuàng)建一個觸發(fā)器,語法格式如下。語法格式如下。create trigger 觸發(fā)器名觸發(fā)器名 觸發(fā)時間觸發(fā)時間 觸發(fā)事件觸發(fā)事件 on 表名表名 for each rowbegin觸發(fā)程序觸發(fā)程序end7.2.1 7.2.1 準備工作準備工作MySQLMySQL的觸發(fā)事件有三種:的觸發(fā)事件有三種: insert insert:將新記錄插入表時激
20、活觸發(fā)程序,將新記錄插入表時激活觸發(fā)程序,例如通過例如通過insertinsert、load dataload data和和replacereplace語句,可語句,可以激活觸發(fā)程序運行。以激活觸發(fā)程序運行。7.2.1 7.2.1 準備工作準備工作MySQLMySQL的觸發(fā)事件有三種:的觸發(fā)事件有三種: updateupdate:更改某一行記錄時激活觸發(fā)程序,更改某一行記錄時激活觸發(fā)程序,例如通過例如通過updateupdate語句,可以激活觸發(fā)程序運行。語句,可以激活觸發(fā)程序運行。 deletedelete:從表中刪除某一行記錄時激活觸發(fā)從表中刪除某一行記錄時激活觸發(fā)程序,例如通過程序,例如
21、通過deletedelete和和replacereplace語句,可以激活語句,可以激活觸發(fā)程序運行。觸發(fā)程序運行。7.2.1 7.2.1 準備工作準備工作 觸發(fā)器的觸發(fā)時間有兩種:觸發(fā)器的觸發(fā)時間有兩種:beforebefore與與afterafter。beforebefore表示在觸發(fā)事件發(fā)生之前執(zhí)行觸發(fā)程表示在觸發(fā)事件發(fā)生之前執(zhí)行觸發(fā)程序。序。afterafter表示在觸發(fā)事件發(fā)生之后執(zhí)行觸發(fā)器表示在觸發(fā)事件發(fā)生之后執(zhí)行觸發(fā)器。因此嚴格意義上講一個數據庫表最多可以設因此嚴格意義上講一個數據庫表最多可以設置六種類型的觸發(fā)器。置六種類型的觸發(fā)器。7.2.1 7.2.1 準備工作準備工作for
22、 each rowfor each row表示行級觸發(fā)器。表示行級觸發(fā)器。 目前目前MySQLMySQL僅支持行級觸發(fā)器,不支持語僅支持行級觸發(fā)器,不支持語句級別的觸發(fā)器(例如句級別的觸發(fā)器(例如create tablecreate table等語等語句)。句)。for each rowfor each row表示更新(表示更新(insertinsert、updateupdate或者或者deletedelete)操作影響的每一條記錄)操作影響的每一條記錄都會執(zhí)行一次觸發(fā)程序。都會執(zhí)行一次觸發(fā)程序。7.2.1 7.2.1 準備工作準備工作觸發(fā)程序中可以使用觸發(fā)程序中可以使用old關鍵字與關鍵字與
23、new關鍵字。關鍵字。 當向表插入新記錄時,在觸發(fā)程序中可當向表插入新記錄時,在觸發(fā)程序中可以使用以使用new關鍵字表示新記錄,當需要訪問關鍵字表示新記錄,當需要訪問新記錄的某個字段值時,可以使用新記錄的某個字段值時,可以使用“new.字字段名段名”的方式訪問。的方式訪問。7.2.1 7.2.1 準備工作準備工作觸發(fā)程序中可以使用觸發(fā)程序中可以使用old關鍵字與關鍵字與new關鍵字。關鍵字。 當從表中刪除某條舊記錄時,在觸發(fā)程當從表中刪除某條舊記錄時,在觸發(fā)程序中可以使用序中可以使用old關鍵字表示舊記錄,當需要關鍵字表示舊記錄,當需要訪問舊記錄的某個字段值時,可以使用訪問舊記錄的某個字段值時
24、,可以使用“old.字段名字段名”的方式訪問。的方式訪問。7.2.1 7.2.1 準備工作準備工作觸發(fā)程序中可以使用觸發(fā)程序中可以使用oldold關鍵字與關鍵字與newnew關鍵字。關鍵字。 當修改表的某條記錄時,在觸發(fā)程序中當修改表的某條記錄時,在觸發(fā)程序中可以使用可以使用oldold關鍵字表示修改前的舊記錄、使關鍵字表示修改前的舊記錄、使用用newnew關鍵字表示修改后的新記錄。當需要訪關鍵字表示修改后的新記錄。當需要訪問舊記錄的某個字段值時,可以使用問舊記錄的某個字段值時,可以使用“old.old.字段名字段名”的方式訪問。當需要訪問修改后的的方式訪問。當需要訪問修改后的新記錄的某個字段
25、值時,可以使用新記錄的某個字段值時,可以使用“new.new.字字段名段名”的方式訪問。的方式訪問。7.2.1 7.2.1 準備工作準備工作觸發(fā)程序中可以使用觸發(fā)程序中可以使用old關鍵字與關鍵字與new關鍵字。關鍵字。 old記錄是只讀的,可以引用它,但不能記錄是只讀的,可以引用它,但不能更改它。在更改它。在before觸發(fā)程序中,可使用觸發(fā)程序中,可使用“set new.col_name = value”更改更改new記錄的值。記錄的值。7.2.1 7.2.1 準備工作準備工作 前面曾經提到,前面曾經提到,MySQL可以使用復合數據可以使用復合數據類型類型set或者或者enum對字段的取值
26、范圍進行檢對字段的取值范圍進行檢查約束,使用復合數據類型可以實現離散的查約束,使用復合數據類型可以實現離散的字符串數據的檢查約束,對于數值型的數不字符串數據的檢查約束,對于數值型的數不建議使用建議使用set或者或者enum實現檢查約束,可以實現檢查約束,可以使用觸發(fā)器實現。使用觸發(fā)器實現。7.2.2 7.2.2 使用觸發(fā)器實現檢查約束使用觸發(fā)器實現檢查約束任務布置任務布置5 5:上機操作,完成本書:上機操作,完成本書場景描述場景描述5 5:使用觸發(fā)器實現檢查約束使用觸發(fā)器實現檢查約束的任務要求。的任務要求。7.2.2 7.2.2 使用觸發(fā)器實現檢查約束使用觸發(fā)器實現檢查約束 冗余的數據需要額外
27、的維護,維護冗余數冗余的數據需要額外的維護,維護冗余數據時,為了避免數據不一致問題的發(fā)生(例據時,為了避免數據不一致問題的發(fā)生(例如:剩余的學生名額如:剩余的學生名額+已選學生人數已選學生人數課程的課程的人數上限),冗余的數據應該盡量避免交由人數上限),冗余的數據應該盡量避免交由人工維護,建議冗余的數據交由應用系統(tǒng)人工維護,建議冗余的數據交由應用系統(tǒng)(例如觸發(fā)器)自動維護。(例如觸發(fā)器)自動維護。7.2.3 7.2.3 使用觸發(fā)器維護冗余數據使用觸發(fā)器維護冗余數據任務布置任務布置6:上機操作,完成本書:上機操作,完成本書場景描述場景描述6:使用觸發(fā)器自動維護課程使用觸發(fā)器自動維護課程avail
28、able的字段值的字段值的任務要求。的任務要求。7.2.3 7.2.3 使用觸發(fā)器維護冗余數據使用觸發(fā)器維護冗余數據 對于對于InnoDB存儲引擎的表而言,由于支持存儲引擎的表而言,由于支持外鍵約束,在定義外鍵約束時,通過設置外外鍵約束,在定義外鍵約束時,通過設置外鍵的級聯選項鍵的級聯選項cascade、set null或者或者no action(restrict),外鍵約束關系可以交由),外鍵約束關系可以交由InnoDB存儲引擎自動維護。存儲引擎自動維護。7.2.4 7.2.4 使用觸發(fā)器模擬外鍵級聯選項使用觸發(fā)器模擬外鍵級聯選項任務布置任務布置7:上機操作,完成本書:上機操作,完成本書場景
29、描述場景描述7:使用使用InnoDB存儲引擎維護外鍵約束關系存儲引擎維護外鍵約束關系的任的任務要求。務要求。任務布置任務布置8:上機操作,完成本書:上機操作,完成本書場景描述場景描述8:使用觸發(fā)器模擬外鍵級聯選項使用觸發(fā)器模擬外鍵級聯選項的任務要求。的任務要求。7.2.4 7.2.4 使用觸發(fā)器模擬外鍵級聯選項使用觸發(fā)器模擬外鍵級聯選項可以使用下面四種方法查看觸發(fā)器的定義??梢允褂孟旅嫠姆N方法查看觸發(fā)器的定義。1使用使用show triggers命令查看觸發(fā)器的定命令查看觸發(fā)器的定義義7.2.5 7.2.5 查看觸發(fā)器的定義查看觸發(fā)器的定義可以使用下面四種方法查看觸發(fā)器的定義??梢允褂孟旅嫠姆N
30、方法查看觸發(fā)器的定義。2查詢查詢information_schema數據庫中的數據庫中的triggers表,可以查看觸發(fā)器的定義表,可以查看觸發(fā)器的定義MySQL中所有觸發(fā)器的定義都存放在中所有觸發(fā)器的定義都存放在information_schema數據庫下的數據庫下的triggers表中,表中,查詢查詢triggers表,可以查看所有數據庫中所有觸表,可以查看所有數據庫中所有觸發(fā)器的詳細信息,查詢語句如下:發(fā)器的詳細信息,查詢語句如下:select * from information_schema.triggersG7.2.5 7.2.5 查看觸發(fā)器的定義查看觸發(fā)器的定義可以使用下面四種方
31、法查看觸發(fā)器的定義??梢允褂孟旅嫠姆N方法查看觸發(fā)器的定義。3使用使用“show create trigger”命令可以查看某命令可以查看某一個觸發(fā)器的定義。一個觸發(fā)器的定義。例如使用例如使用“show create trigger organization_delete_before_triggerG”命令可命令可以查看觸發(fā)器以查看觸發(fā)器organization_delete_before_trigger的定義。的定義。7.2.5 7.2.5 查看觸發(fā)器的定義查看觸發(fā)器的定義可以使用下面四種方法查看觸發(fā)器的定義??梢允褂孟旅嫠姆N方法查看觸發(fā)器的定義。4成功創(chuàng)建觸發(fā)器后,成功創(chuàng)建觸發(fā)器后,MyS
32、QL自動在數據庫目自動在數據庫目錄下創(chuàng)建錄下創(chuàng)建TRN以及以及TRG觸發(fā)器文件,以記事本方觸發(fā)器文件,以記事本方式打開這些文件,可以查看觸發(fā)器的定義。式打開這些文件,可以查看觸發(fā)器的定義。7.2.5 7.2.5 查看觸發(fā)器的定義查看觸發(fā)器的定義可以使用可以使用drop trigger語句將該觸發(fā)器刪除,語語句將該觸發(fā)器刪除,語法格式如下。法格式如下。drop trigger 觸發(fā)器名觸發(fā)器名7.2.6 7.2.6 刪除觸發(fā)器刪除觸發(fā)器1觸發(fā)程序中如果包含觸發(fā)程序中如果包含select語句,該語句,該select語語句不能返回結果集。句不能返回結果集。2同一個表不能創(chuàng)建兩個相同觸發(fā)時間、觸發(fā)同一
33、個表不能創(chuàng)建兩個相同觸發(fā)時間、觸發(fā)事件的觸發(fā)程序。事件的觸發(fā)程序。3觸發(fā)程序中不能使用以顯式或隱式方式打開、觸發(fā)程序中不能使用以顯式或隱式方式打開、開始或結束事務的語句,如開始或結束事務的語句,如start transaction、commit、rollback或者或者set autocommit=0等語等語句。句。7.2.7 7.2.7 使用觸發(fā)器的使用觸發(fā)器的1010條注意事項條注意事項4MySQL觸發(fā)器針對記錄進行操作,當批量更觸發(fā)器針對記錄進行操作,當批量更新數據時,引入觸發(fā)器會導致更新操作性能降低。新數據時,引入觸發(fā)器會導致更新操作性能降低。5在在MyISAM存儲引擎中,觸發(fā)器不能保
34、證原子存儲引擎中,觸發(fā)器不能保證原子性。性。InnoDB存儲引擎支持事務,使用觸發(fā)器可存儲引擎支持事務,使用觸發(fā)器可以保證更新操作與觸發(fā)程序的原子性,此時觸發(fā)以保證更新操作與觸發(fā)程序的原子性,此時觸發(fā)程序和更新操作是在同一個事務中完成。程序和更新操作是在同一個事務中完成。7.2.7 7.2.7 使用觸發(fā)器的使用觸發(fā)器的1010條注意事項條注意事項6InnoDB存儲引擎實現外鍵約束關系時,建議存儲引擎實現外鍵約束關系時,建議使用級聯選項維護外鍵數據;使用級聯選項維護外鍵數據;MyISAM存儲引擎存儲引擎雖然不支持外鍵約束關系時,但可以使用觸發(fā)器雖然不支持外鍵約束關系時,但可以使用觸發(fā)器實現級聯修
35、改和級聯刪除,進而維護實現級聯修改和級聯刪除,進而維護“外鍵外鍵”數數據,模擬實現外鍵約束關系。據,模擬實現外鍵約束關系。7.2.7 7.2.7 使用觸發(fā)器的使用觸發(fā)器的1010條注意事項條注意事項7使用觸發(fā)器維護使用觸發(fā)器維護InnoDB外鍵約束的級聯選項外鍵約束的級聯選項時,數據庫開發(fā)人員究竟應該選擇時,數據庫開發(fā)人員究竟應該選擇after觸發(fā)器還觸發(fā)器還是是before觸發(fā)器?答案是:應該首先維護子表的觸發(fā)器?答案是:應該首先維護子表的數據,然后再維護父表的數據,否則可能出現錯數據,然后再維護父表的數據,否則可能出現錯誤。誤。 7.2.7 7.2.7 使用觸發(fā)器的使用觸發(fā)器的1010條注
36、意事項條注意事項8MySQL的觸發(fā)程序不能對本表進行更新語句的觸發(fā)程序不能對本表進行更新語句(例如(例如update語句)。觸發(fā)程序中的更新操作可語句)。觸發(fā)程序中的更新操作可以直接使用以直接使用set命令替代,否則可能出現錯誤信息,命令替代,否則可能出現錯誤信息,甚至陷入死循環(huán)。甚至陷入死循環(huán)。9在在before觸發(fā)程序中,觸發(fā)程序中,auto_increment字段字段的的new值為值為0,不是實際插入新記錄時自動生成的,不是實際插入新記錄時自動生成的自增型字段值。自增型字段值。7.2.7 7.2.7 使用觸發(fā)器的使用觸發(fā)器的1010條注意事項條注意事項10添加觸發(fā)器后,建議對其進行詳細的
37、測試,添加觸發(fā)器后,建議對其進行詳細的測試,測試通過后再決定是否使用觸發(fā)器。測試通過后再決定是否使用觸發(fā)器。7.2.7 7.2.7 使用觸發(fā)器的使用觸發(fā)器的1010條注意事項條注意事項1 12 23 3按照按照MySQL臨時表的存儲臨時表的存儲位置可以將其分為內存臨位置可以將其分為內存臨時表(時表(in-memory)以及)以及外存臨時表(外存臨時表(on-disk)。)。 按照按照MySQL臨時表的創(chuàng)建臨時表的創(chuàng)建時機可以將其分為自動創(chuàng)時機可以將其分為自動創(chuàng)建的臨時表以及手動創(chuàng)建建的臨時表以及手動創(chuàng)建的臨時表。的臨時表。 “選課系統(tǒng)選課系統(tǒng)”中臨時表的使用中臨時表的使用臨時表的創(chuàng)建、查看與刪
38、除臨時表的創(chuàng)建、查看與刪除使用臨時表的注意事項使用臨時表的注意事項7.3 7.3 臨時表臨時表1手動創(chuàng)建臨時表手動創(chuàng)建臨時表手動創(chuàng)建臨時表很容易,給正常的手動創(chuàng)建臨時表很容易,給正常的create table語句加上語句加上temporary關鍵字即可。關鍵字即可。 2查看臨時表的定義可以使用查看臨時表的定義可以使用MySQL語句語句“show create table 臨時表名臨時表名;”。 7.3.1 7.3.1 臨時表的創(chuàng)建、查看與刪除臨時表的創(chuàng)建、查看與刪除3斷開斷開MySQL服務器的連接,臨時表服務器的連接,臨時表frm表結表結構定義文件以及表記錄將被清除。使用構定義文件以及表記錄將
39、被清除。使用drop命令命令也可以刪除臨時表,語法格式如下。也可以刪除臨時表,語法格式如下。drop temporary table 臨時表表名臨時表表名7.3.1 7.3.1 臨時表的創(chuàng)建、查看與刪除臨時表的創(chuàng)建、查看與刪除任務布置任務布置9:上機操作,完成本書:上機操作,完成本書場景描述場景描述9的任的任務要求。務要求。7.3.2 “7.3.2 “選課系統(tǒng)選課系統(tǒng)”中臨時表的使用中臨時表的使用 使用存儲程序可以實現表數據的復雜加工處使用存儲程序可以實現表數據的復雜加工處理,有時需要將理,有時需要將select語句的查詢結果集臨時地語句的查詢結果集臨時地保存到存儲程序(例如函數、存儲過程)的
40、變量保存到存儲程序(例如函數、存儲過程)的變量中,不過目前中,不過目前MySQL并不支持表類型變量。臨時并不支持表類型變量。臨時表可以模擬實現表類型變量的功能。表可以模擬實現表類型變量的功能。7.3.2 7.3.2 使用臨時表的注意事項使用臨時表的注意事項 臨時表如果與基表重名,那么基表將被隱藏,臨時表如果與基表重名,那么基表將被隱藏,除非刪除臨時表,基表才能被訪問。除非刪除臨時表,基表才能被訪問。 Memory、MyISAM、Merge或者或者InnoDB存存儲引擎的表都支持臨時表。儲引擎的表都支持臨時表。 臨時表不支持聚簇索引、觸發(fā)器。臨時表不支持聚簇索引、觸發(fā)器。7.3.2 7.3.2
41、使用臨時表的注意事項使用臨時表的注意事項 show tables 命令不會顯示臨時表的信息。命令不會顯示臨時表的信息。 不能用不能用rename來重命名一個臨時表。但可以來重命名一個臨時表。但可以使用使用alter table重命名臨時表。重命名臨時表。 在同一條在同一條select語句中,臨時表只能引用一語句中,臨時表只能引用一次。例如下面的次。例如下面的select語句將拋出語句將拋出“ERROR 1137 (HY000): Cant reopen table: t1”錯誤信錯誤信息。息。 select * from temp as t1, temp as t2;7.3.2 7.3.2 使
42、用臨時表的注意事項使用臨時表的注意事項 派生表與視圖一樣,一般在派生表與視圖一樣,一般在from子句中使用,子句中使用,其語法格式如下(粗體字代碼為派生表代碼)。其語法格式如下(粗體字代碼為派生表代碼)。.from (select子句子句) 派生表名派生表名.派生表必須是一個有效的表,因此它必須遵守以派生表必須是一個有效的表,因此它必須遵守以下規(guī)則:下規(guī)則:每個派生表必須有自己的別名。每個派生表必須有自己的別名。派生表中的所有字段必須要有名稱,字段名必須派生表中的所有字段必須要有名稱,字段名必須唯一。唯一。7.4 7.4 派生表(派生表(Derived TableDerived Table)任務布置任務布置10:完成本書:完成本書場景描述場景
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年安徽省合肥四十五中(橡樹灣校區(qū))中考物理一模試卷(含解析)
- 天津耀華嘉誠國際中學2025年高三第二學期期中考試數學試題試卷含解析
- 重慶工業(yè)職業(yè)技術學院《出鏡報道實務》2023-2024學年第二學期期末試卷
- 浙江省慈溪市附海初級中學2024-2025學年初三下第二次模擬考試綜合試題含解析
- 呂梁學院《景區(qū)運營管理》2023-2024學年第二學期期末試卷
- 廊坊職業(yè)技術學院《休閑體育項目概論》2023-2024學年第二學期期末試卷
- 湖北省隨州市隨縣2025年初三下學期學前考試英語試題文試題含答案
- 山東省棗莊市薛城區(qū)第八中學2025屆高三下學期3月適應性考試歷史試題含解析
- 昆明醫(yī)科大學《現代醫(yī)學基礎》2023-2024學年第二學期期末試卷
- 四川省蒼溪縣重點達標名校2025年區(qū)域教師研修一體課程復數與邏輯含解析
- 中共在抗日戰(zhàn)爭中的作用
- 應急避難場所設置
- 尿激酶溶栓護理課件
- 《曼陀羅繪畫療愈-初三減壓》PPT
- 四川2022年4月自考06088《管理思想史》真題
- 砼工程技術交底
- 煤礦污水處理站制度(完整版)資料
- 彩鋼板屋面監(jiān)理細則
- 麻醉藥品、精神藥品月檢查記錄表
- 2023年貴州省中學生生物學競賽考試(初賽)試題( 含答案解析 )
- 單片機課程設計報告電子密碼鎖
評論
0/150
提交評論