1. 程式人生 > 其它 >10行程式碼實現一個值班提醒應用

10行程式碼實現一個值班提醒應用

1.觸發器的基本介紹:其建立的樣式類似於儲存函式和儲存過程,但是與儲存函式和儲存過程不同,觸發器的呼叫觸發是經過預先規定的,而不在是通過手動輸入程式碼進行呼叫。

    主要功能:一般用於一個表中的資料改變時,與之相關聯的表的更新(因為表的相關性,相關表的資料在原表改變後也需要進行更新同一,如果全部手動操作一遍則過於繁瑣,因此引入了觸發器的概念)

 

觸發器的基本語句形式:

1 CREATE TRIGGER 觸發器名稱
2 BEFORE/AFTER(操作執行前還是執行後觸發) INSERT/UPDATE/DELETE(針對哪種操作會觸發) ON 表名(對哪個表起作用)
3 FOR EACH ROW #每執行一行觸發一次
4 觸發器執行的語句塊;

例項:

1 DELIMITER //
2 CREATE TRIGGER before_insert_test_tri
3 BEFORE INSERT ON test_trigger
4 FOR EACH ROW
5 BEGIN
6     INSERT INTO test_trigger_log(t_log)
7     VALUES ("before_insert");
8 END //
9 DELIMITER;

 

2.有關觸發器的實際應用:

(1).

 1 #例項問題解決1
 2 #向test_trigger資料表插入資料後,向test_trigger_log插入after_insert的資訊日誌
3 DELIMITER // 4 CREATE TRIGGER after_insert 5 AFTER INSERT ON test_trigger 6 FOR EACH ROW #此行記得不要遺忘! 7 BEGIN 8 INSERT INTO test_trigger_log(t_log) 9 VALUES("after insert"); 10 END // 11 DELIMITER;

 

(2).

 1 #例項問題解決2
 2 #基於員工表的INSERT事件,在INSERT之前檢查新員工薪資是否大於他領導的薪資,如果大於則認為是非法操作
 3 #則報sqlstate_value為'
HY000'的錯誤,使得新增失敗 4 DELIMITER // 5 CREATE TRIGGER salary_check_trigger 6 BEFORE INSERT ON employees 7 FOR EACH ROW 8 BEGIN 9 DECLARE mgr_sal DOUBLE; 10 SELECT salary INTO mgr_sal FROM employees 11 WHERE employee_id = new.manager_id;#new就表示所目前所插入的這個元組 12 13 IF (new.salary > mgr_sal) 14 THEN SIGNAL SQLSTATE 'HY000' SET MESSAGE_TEXT = "薪資有誤";#該行即輸出錯誤資訊 15 END IF; 16 17 END // 18 DELIMITER;

 

(3).

 1 #3. 建立觸發器emps_del_trigger,每當向emps表中刪除一條記錄時,同步將刪除的這條記錄新增到emps_back1表中
 2 DELIMITER //
 3 CREATE TRIGGER emps_del_trigger
 4 AFTER DELETE ON emps
 5 FOR EACH ROW
 6 BEGIN
 7     INSERT INTO emps_back1(employee_id,last_name,salary)
 8     VALUES (old.employee_id,old.last_name,old.salary);#old表示所目前所插入的這個元組
 9 END //
10 DELIMITER;