5. 觸發器和常用函數 加密函數-mysql

觸發器是由事件來觸發的,和update,insert和delete操作相對應。當數據庫系統執行這些操作的時候,激活觸發器做出相應的操作。

創建只有一個執行語句的觸發器 較爲簡單 易於理解

比如說有兩個圖書表t_book和t_bookType,一個存放各圖書的信息,都有哪些圖書;一個存放圖書的類別,各個類別下都有多少本書,記錄着各個類別圖書的數量。如下圖


現在往t_book裏面加入一本新數學類的書《運籌學》。那麼完成一個觸發器就是插入新的書本之後,對應類別的記錄書數量的值也要改變,這就是這個觸發器的主要功能。

創建一個觸發器:執行時間插入之後 這裏有一個new對象,指的就是新插入的記錄,刪除的時候那就是old了。

CREATE TRIGGER trig_book AFTER INSERT
		ON t_book FOR EACH ROW
		UPDATE t_booktype SET bookCount = bookCount + 1 
WHERE new.bookType = t_booktpe.id;

測試插入新數據

INSERT INTO t_book VALUES(NULL, '運籌學', 35, 4);


可以看出觸發器是完成了將t_bookType表中對應圖書類別數量加1了。

多個執行語句的觸發器

上面的只有一個執行語句的觸發器,觸發器只做了一個操作,對應類別數量加一。

完成多個執行語句的觸發器, 語法相同。

比如:完成一個包含多個執行語句的觸發器,要求在刪除t_book表的一條記錄之後,做2個操作:

1、更新統計圖書數量 數量應該自減1

2、插入一條日誌信息,在某某時間做了一次刪除操作。這個另外建一張表t_log

t_log表結構

觸發器的創建 delimiter && 作用在於由於mysql執行語句的時候,遇到分號就直接執行了,這裏由於有多條語句 多個分號 就用它把它框起來 這個意思 設置結束符 從哪開始 到哪結束。

delimiter &&
CREATE TRIGGER dept_trig2 AFTER DELETE ON t_book FOR EACH ROW
			BEGIN
				INSERT INTO t_log VALUE(NULL, NOW(), '當前對t_book

表執行了一次刪除操作');
				UPDATE t_booktype SET bookCount = bookCount - 1 
				where old.bookType = t_booktype.id;
			END
			&&
delimiter;

刪除語句測試

DELETE FROM t_book WHERE bookName='運籌學';

測試結果:


觸發器就可以看成是一個事件監聽處理,對數據庫的一系列動作進行判斷,從而執行對應的操作。


MYSQL常用函數

一、日期類函數

1.CURDATE( ) 返回當前日期

2.CURTIME()返回當前的時間

3.MONTH(d)返回日期d中的月份值,1-12

更多的函數 查一下 用法都是一樣的

二、字符串函數

計算字符串長度函數 CHAR_LENGTH(s)

大小寫轉化函數UPPER(s) LOWER(s)

三、數學函數

常見的數學函數 就是求根,取餘,求對絕對值函數等等 不想敲了

四、加密函數

加密函數還是比較重要的,一個賬戶的密碼存入數據庫表,存的肯定不是明文,而是加密之後的密文,所以平時生活中忘記密碼找回密碼的時候只有重新設置一個密碼,而沒有找到原來的密碼。所以也不用擔心 數據庫泄漏會將自己的密碼泄漏出去,存放都是密碼加密之後的密文 通常都是 MD5加密。

1.PASSWORD(str) 不可逆加密

2.MD5(str)  不可逆加密

3.ENCODE(str, passwd_str) 可逆的加密函數, 第二個參數是密鑰,,結果是一個二進制數 定義字段也應是二進制

4.DECODE(cpt_str, paswd_str)用密鑰解密的解密函數 同樣第二個參數是密鑰

建一個表分別試一下MD5加密和ENCODE加密


INSERT INTO t_passwd VALUES(NULL, MD5('zheshimd5passwd'), ENCODE('encodepasswd','kwen'));

表中加密的數據如上 和密碼一點都不像

md5加密是不可逆的,驗證密碼正確的時候,將用戶輸入的密碼通過md5函數轉化爲字符串和數據庫表中判斷,從而返回密碼是否正確的結果。

而encode加密可以通過密鑰解密出密碼 但驗證密碼正確性應該也是通過判斷密文 而不是解密出明文,這樣子安全。

 select decode(passwd2, 'kwen') from t_passwd;

這個加密函數是可以通過密鑰,密文解密出明文的。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章