追蹤
NEIL's_學而時習之x不學無術~私藏IT技術經驗分享部落
關於部落格
NEIL. Cheng....寫作只是為了日後工作之備忘操作參考

本部落格文章撰寫前進邁向第五年(since 2009 ~至今)仍繼續推進分享IT學習!!About Windows/Linux Server,Virtualization


分享網誌: 由於,本人預先完成LAB後,才補上撰寫文章與截圖,若發現文圖對照說明有誤..本人將盡快校正,也請不吝指教! Thanks!

  • 163898

    累積人氣

  • 99

    今日人氣

    0

    追蹤人氣

MySQL 資料庫_建立"視界","預儲程序","觸發程序"及常態資料表維護備忘By Remiel

實驗開始

A:[檢視表]

   create view donadona as select no from ko2 where no <5;

   #建立一個檢視表(donadona)於現有資料庫(remiel)內指定資料表(ko2)中

    "no" 欄位條件<5 資料擷取之.


    select  * from donadona;    #檢視現有的檢視表內容



 
 




















習慣於陳述式後方加入 with check option 

  #防止不符合欄位資料型態強制新增寫入,更為安全
 

   show tables; #檢視現有資料表

   drop view donadona; #將先前建立view移除



 
B:[預存(儲)程序]

> delemiter //
> create procedure pr2()
#pr2()內可設置變數EX: pr2(i int),於SQL陳述式內使用
> BEGIN
> select * from ko2; 
#SQL陳述式可客製化您條件式
> END

> //
> delemiter:


-------
call pr2 ; #呼叫名為 pr2 之 store procedure 並執行之



 於procedure 指定變數,互動設計範例

> delemiter //
> create procedure pr10(n int) 
> BEGIN
> select * from ko2 where sid >=n ;
 #SQL陳述式可客製化您條件式
> END
> //
> delemiter;


------------------------

 call pr10(200) ; # 呼叫名為pr10之Procedure內SQL陳述式"n"的餵其數值為"200"

--------------------------

show create procdure pr10; #檢視目前已存在Procdure 內容

drop procedure pr10;  #刪除指定的procedure;





C:[觸發程序]

 >delimiter //         #下圖有誤請修正
  >create trigger kill_lady after insert on ko2 for each row
  >begin
  > delete from ko3 where name='ladygaga';
  >end
 >//

--------------
>delimiter//

上述設立觸發程序是: 若在我們於ko2,這張表單上執行Insert動作(新增資料)

將觸發程序執行ko3表單"刪除name欄位符合ladygagga"字串資料


情境假設:ko2 ,ko3 兩表皆有兩筆資料name=ladydaga 

















接下來我們試著於ko2新增一筆資料,新增完成後檢查ko3 表單內name="ladygaga"

資料是否被砍除? 參考下圖; ko3 表單已經被觸發動作刪除

 show triggers G;        #查看目前已存在的Triggers

 Drop Trigger kill_lady;  #刪除triggers名為kill_lady

 






















資料庫_資料表維運:

分析(Analyze)->檢查(Check)->最佳化(Optimize)->修復(Repir) 
 
MySQL 5.5版本以後以InnoDB為預設儲存引擎


analyze table ko2;  #可利用分析資料表了解Msg_Text顯示相關資訊


















check table ko3 quick;    #資料表檢查分三個層級預設不加參數為"medium"

                                              quick:  不掃描所有欄位與布正確之連結

                                              medium: 檢查索引中每一筆紀錄

                                              extended: 詳細檢查每一筆紀錄

                                            註: 尚有fast,changed 參數..搭配使用,我們可使用check

                           檢視出資料表是否出現Error訊息,並著手修復.




















 

optimize table ko3;  #使用最佳化資料表時發現"錯誤訊息"如下

  Table does not support optimize, doing recreate + analyze instead...

    由於前面提到測試使用InnoDB儲存引擎會出現此錯誤,但在MyISAM上是可以順利執行

  於是我將MySQL 停止並重新啟動加入以下參數後再次啟動MySQL


     /usr/bin/mysqld_safe --skip-new &



















 
optimize table ko2;  #進行optimize最佳化,已順利運行,定期使用最佳化動作可使資料庫總
 
                   空間,並可騰出多餘閒置空間.






















最後介紹維護指令是搭配外部指令: mysqlcheck 示範,上述的指令於mysqlcheck 參數內皆有支援

   可方便管理員整合script 自動排程執行,repair 指令只適用於MyISAM 儲存引擎

    以下以MySAM 儲存引擎 做為測試  (InnoDB具自我Recovery功能)

     mysqlcheck --repair mysql -u root -pxxxx ;     #修復層級附加參數:

     --quick: 資料表尚未修改情況下進行修復
     --extended: 嘗試修復每一筆紀錄
     --use_frm: .myi 檔案遺失時,使用.frm檔案定義重建索引





















最後我們可以使用"man mysqlcheck"  進一步查詢相關使用參數,本人在此不再贅述...
 

相簿設定
標籤設定
相簿狀態