觸發器是由事件來觸發的,和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;
這個加密函數是可以通過密鑰,密文解密出明文的。