10行程式碼實現一個值班提醒應用
阿新 • • 發佈:2022-03-29
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;