7章 視圖與觸發(fā)器,8章存儲過程锦爵,游標

create view 視圖名[(視圖字段列表)]
as
select 語句
[with [local | cascaded] check option]
建視圖名中統(tǒng)一添加前綴view_或后綴_view
視圖的作用
1:是操作變得簡單
2:避免冗余數(shù)據(jù)
3:增強安全性
同一個數(shù)據(jù)可以創(chuàng)建不同的視圖,為不同的用戶分配不同的視圖奥裸,這樣可以實現(xiàn)不同的用戶只能查詢和修改對應的數(shù)據(jù)险掀,從而增強數(shù)據(jù)的安全性。
4:提高數(shù)據(jù)的邏輯獨立性
有了視圖湾宙,應用程序可以建立在視圖之上樟氢,從而使應用程序和數(shù)據(jù)表結構在一定程度上邏輯分離。
a: 視圖可以向應用程序屏蔽表結構侠鳄,如果表結構發(fā)生變化埠啃,只需修改視圖,無需修改應用程序
b:使用視圖可以向數(shù)據(jù)庫屏蔽應用程序伟恶。如果應用程序發(fā)現(xiàn)變化碴开,只需重新定義或修改視圖,無需修改數(shù)據(jù)庫表結構博秫。

drop view視圖名

create trigger 觸發(fā)器名 觸發(fā)時間 觸發(fā)事件 on 表名 for each row
begin
觸發(fā)程序
end;

查看觸發(fā)器定義
show triggers;
刪除觸發(fā)器 drop trigger 觸發(fā)器名潦牛;
觸發(fā)器注意事項:
1:如果觸發(fā)程序包含select語句,select不能返回結果集
2:同一個表不能創(chuàng)建兩個相同的觸發(fā)器
3:觸發(fā)程序中不能顯示或隱式的打開台盯,開始或結束事務罢绽。
4:觸發(fā)器針對記錄操作,當批量操作時静盅,性能降低良价。
5:MyISAM引擎中,觸發(fā)器不能保證原子性蒿叠。
8:MySQL觸發(fā)程序不能對本表執(zhí)行update操作明垢,可以用set命令代替,否則會出錯市咽。
9:before觸發(fā)程序中痊银,auto_increment字段的new值為0,不是實際插入記錄時自動生成的自增類型字段施绎。

臨時表分為內(nèi)存臨時表(in-memory)以及外存臨時表(on-disk)
手工創(chuàng)建臨時表溯革,就是正常create table語句加上temporary
如:
create temporary table temp(name char(100));
insert into temp values('test');
select * from temp;
查看臨時表 show create table臨時表名;
刪除 drop temporary table臨時表名谷醉;
注意事項:
臨時表是數(shù)據(jù)庫對象致稀,因此創(chuàng)建臨時表需要指定該臨時表屬于哪個數(shù)據(jù)庫。
臨時表如果與基表重名俱尼,那么基表將被隱藏抖单,除非臨時表刪除,基表才能被訪問。
MyISAM,Merge ,InnoDB引擎都支持臨時表
臨時表引擎由default_tmp_storage_engine決定
show table 命令不會顯示臨時表
rename不能重命名臨時表矛绘,但可以使用alter table 來重命名
通過視圖雖然可以更新基表數(shù)據(jù)耍休,但不建議這么做,因為通過視圖更新基表數(shù)據(jù)货矮,并不會觸發(fā)觸發(fā)器運行羊精。

存儲過程
create procedure 存儲過程名(參數(shù)1,參數(shù)2,……)
[存儲過程選項]
begin
存儲過程語句塊;
end;

存儲過程參數(shù)有in , out , inout
存儲過程必須通過call來調(diào)用
查看存儲過程 show procedure status;
show procedure status like模式 過濾查找
select name from mysql.proc where db='choose' and type ='procedure';
通過命令 show create procedure存儲過程名; 可以查看指定數(shù)據(jù)庫指定存儲過程的詳細信息次屠,存儲過程信息保存在information_schema數(shù)據(jù)庫中routines表
Select * from information_schema.routines where routine_name = '存儲過程名';
drop procedure存儲過程名; 來刪除存儲過程
存儲過程與函數(shù)的區(qū)別:
1:函數(shù)有且僅有一個返回值园匹,且必須指定返回值類型。存儲過程可以沒有返回值劫灶,也可以有裸违,甚至多個,返回值需要使用out或者inout參數(shù)定義本昏。
2:函數(shù)可以使用select……into語句為變量賦值供汛,但不能使用select返回結果集。存儲過程則都可以涌穆。
3:函數(shù)可以直接嵌入到sql語句或表達式中怔昨,可以擴展標準的sql語句,存儲過程則需要單獨調(diào)用宿稀,并使用call關鍵字趁舀。
4:函數(shù)中的函數(shù)體限制比較多,比如不能顯示或隱式的打開祝沸,開始或結束事務矮烹。存儲過程則限制較少,可以使用事務罩锐,可以使用預處理SQL語句奉狈。
5:應用程序調(diào)用函數(shù)時,通常將函數(shù)封裝成sql字符串進行調(diào)用涩惑,而調(diào)用存儲過程必須使用call關鍵字仁期。存儲過程返回值通過out或inout參數(shù)傳遞給mysql會話變量。

自定義錯誤處理程序:
declare 錯誤處理類型 handler for 錯誤觸發(fā)條件 自定義錯誤處理程序竭恬;
自定義錯誤觸發(fā)條件
declare 錯誤觸發(fā)條件 condition for MySQL錯誤代碼或者ANSI標準錯誤代碼
如:
declare continue handler for 1452
begin
set @error1='外鍵約束錯誤!';
end;
可以修改為:
declare foreign_key_error condition for sqlstate '23000';
declare continue handler for foreign_key_error
begin
set @error1='外鍵約束錯誤!';
end;
說明:
MySQL預定義了sqlexception,sqlwarning,not found等錯誤觸發(fā)條件跛蛋,這些錯誤觸發(fā)條件無需數(shù)據(jù)庫開發(fā)人員定義,可以直接使用痊硕。

declare游標 --聲明游標
opne游標-- 打開游標
fetch游標 --提取數(shù)據(jù)
處理結果集中的數(shù)據(jù)
close游標--關閉游標

declare游標名 cursor for select語句
聲明游標后赊级,游標中select語句并沒有執(zhí)行,沒有select語句集寿桨。
open 游標名
打開游標名,select語句被執(zhí)行,MySQL服務器內(nèi)存有select語句結果集亭螟。
從游標中取數(shù)據(jù)
fetch 游標名 into 變量名1挡鞍,變量名2,……
說明:變量名個數(shù)必須與聲明游標時使用的select語句結果集中字段個數(shù)保存一致预烙。
fetch語句需要循環(huán)語句配合墨微,才能實現(xiàn)整個結果集的遍歷。
當fetch語句取出最后一個記錄扁掸,再次執(zhí)行fetch語句將產(chǎn)生“ERROR 1329(02000):No data to FETCH”錯誤信息翘县,數(shù)據(jù)庫開發(fā)時可以針對1329自定義錯誤處理程序,以便結束結果集遍歷谴分。
關閉游標:
close 游標名

預處理SQL
1:創(chuàng)建預處理SQL
prepare 預處理SQL語句名 from SQL字符串
如:
prepare select_class_pre from 'select * from classes';
預處理語句是數(shù)據(jù)庫對象锈麸,因此創(chuàng)建預處理語句SQL時,需要指定屬于哪個數(shù)據(jù)庫牺蹄。
執(zhí)行預處理語句:
execute預處名[using 填充數(shù)據(jù)[,填充數(shù)據(jù)……]]
using 將填充數(shù)據(jù)到SQL語句中對應位置的“?”問號忘伞。
如: execute select_class_pre;
釋放預處理語句
deallocate prepare預處理名;

MySQL的存儲程序分為4類:函數(shù),觸發(fā)器沙兰,存儲過程以及事件氓奈。

?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市鼎天,隨后出現(xiàn)的幾起案子舀奶,更是在濱河造成了極大的恐慌,老刑警劉巖斋射,帶你破解...
    沈念sama閱讀 211,123評論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件育勺,死亡現(xiàn)場離奇詭異,居然都是意外死亡绩鸣,警方通過查閱死者的電腦和手機怀大,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,031評論 2 384
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來呀闻,“玉大人化借,你說我怎么就攤上這事〖穸啵” “怎么了蓖康?”我有些...
    開封第一講書人閱讀 156,723評論 0 345
  • 文/不壞的土叔 我叫張陵,是天一觀的道長垒手。 經(jīng)常有香客問我蒜焊,道長,這世上最難降的妖魔是什么科贬? 我笑而不...
    開封第一講書人閱讀 56,357評論 1 283
  • 正文 為了忘掉前任泳梆,我火速辦了婚禮鳖悠,結果婚禮上,老公的妹妹穿的比我還像新娘优妙。我一直安慰自己乘综,他們只是感情好,可當我...
    茶點故事閱讀 65,412評論 5 384
  • 文/花漫 我一把揭開白布套硼。 她就那樣靜靜地躺著卡辰,像睡著了一般。 火紅的嫁衣襯著肌膚如雪邪意。 梳的紋絲不亂的頭發(fā)上九妈,一...
    開封第一講書人閱讀 49,760評論 1 289
  • 那天,我揣著相機與錄音雾鬼,去河邊找鬼萌朱。 笑死,一個胖子當著我的面吹牛呆贿,可吹牛的內(nèi)容都是我干的嚷兔。 我是一名探鬼主播,決...
    沈念sama閱讀 38,904評論 3 405
  • 文/蒼蘭香墨 我猛地睜開眼做入,長吁一口氣:“原來是場噩夢啊……” “哼冒晰!你這毒婦竟也來了?” 一聲冷哼從身側響起竟块,我...
    開封第一講書人閱讀 37,672評論 0 266
  • 序言:老撾萬榮一對情侶失蹤壶运,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后浪秘,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體蒋情,經(jīng)...
    沈念sama閱讀 44,118評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,456評論 2 325
  • 正文 我和宋清朗相戀三年耸携,在試婚紗的時候發(fā)現(xiàn)自己被綠了棵癣。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,599評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡夺衍,死狀恐怖狈谊,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情沟沙,我是刑警寧澤河劝,帶...
    沈念sama閱讀 34,264評論 4 328
  • 正文 年R本政府宣布,位于F島的核電站矛紫,受9級特大地震影響赎瞎,放射性物質發(fā)生泄漏。R本人自食惡果不足惜颊咬,卻給世界環(huán)境...
    茶點故事閱讀 39,857評論 3 312
  • 文/蒙蒙 一务甥、第九天 我趴在偏房一處隱蔽的房頂上張望牡辽。 院中可真熱鬧,春花似錦敞临、人聲如沸催享。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,731評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至痰憎,卻和暖如春票髓,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背铣耘。 一陣腳步聲響...
    開封第一講書人閱讀 31,956評論 1 264
  • 我被黑心中介騙來泰國打工洽沟, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人蜗细。 一個月前我還...
    沈念sama閱讀 46,286評論 2 360
  • 正文 我出身青樓裆操,卻偏偏與公主長得像,于是被迫代替她去往敵國和親炉媒。 傳聞我的和親對象是個殘疾皇子踪区,可洞房花燭夜當晚...
    茶點故事閱讀 43,465評論 2 348

推薦閱讀更多精彩內(nèi)容

  • ORA-00001: 違反唯一約束條件 (.) 錯誤說明:當在唯一索引所對應的列上鍵入重復值時,會觸發(fā)此異常吊骤。 O...
    我想起個好名字閱讀 5,249評論 0 9
  • MYSQL 基礎知識 1 MySQL數(shù)據(jù)庫概要 2 簡單MySQL環(huán)境 3 數(shù)據(jù)的存儲和獲取 4 MySQL基本操...
    Kingtester閱讀 7,787評論 5 116
  • 1.1 基本結構 PL/SQL程序由三個塊組成缎岗,即聲明部分、執(zhí)行部分白粉、異常處理部分传泊。 1.2 命名規(guī)則 1.3 記...
    慢清塵閱讀 3,835評論 3 14
  • 轉 # https://www.cnblogs.com/easypass/archive/2010/12/ 08/...
    呂品?閱讀 9,709評論 0 44
  • 原英文文檔 簡介 matplotlib是一個在python中廣泛使用的2-D繪圖包。其為python數(shù)據(jù)的可...
    charmler閱讀 1,305評論 0 1