日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > windows >内容正文

windows

数据库系统(四)——触发器

發布時間:2024/9/30 windows 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 数据库系统(四)——触发器 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

一、實驗目的:

  • 熟悉通過SQL對數據進行完整性控制;

  • 練習實際應用中完整性控制方法;

  • 練習觸發器的創建和使用。

  • 二、實驗內容 :

    基于某員工管理數據庫,使用觸發器實現數據完整性控制,完成以下功能:

  • 創建觸發器實現員工入職時,記錄員工初始部門和工資信息到變動歷史表中;

  • 創建觸發器實現員工信息變更時,記錄員工的部門或工資變動情況到變動歷史表中;

  • 創建觸發器實現員工離職時,自動備份離職前的工資到變動歷史表中。

  • 三、題目:

    某員工信息管理系統中,當員工入職、離職、調動部門或工資變動時,需將變動信息記入變動歷史中,請使用觸發器完成此功能。變動歷史包含部門變動歷史和工資變動歷史,分別使用部門變動歷史表和工資變動歷史表記錄對應信息。

    參考表結構如下:

  • 員工表:employee(eid,ename,dept,salary,uptime,stutus)
    其中eid為員工編號,ename為員工姓名,dept為所在部門,salary為工資,uptime為修改時間,stutus為狀態(1表示在職,0表示離職)。

  • 部門變動歷史表:dept_history(dhid, eid, old, new, uptime)
    其中dhid為部門變動編號(自動增長,無需賦值),eid為員工編號,old為調動前的部門(新入職的員工old值記為NULL),new為調動后的部門,uptime為修改時間。

  • 工資變動歷史表:sal_history(shid, eid, old, new, uptime)
    其中shid為工資變動編號(自動增長,無需賦值),eid為員工編號,old為變動前的工資,new為變動后的工資,uptime為修改時間。

  • 觸發器要求如下:

  • 當新職工入職時,員工信息表將插入1條數據。同時,觸發器在部門變動歷史中增加1條記錄,其中old值為null;在工資變動歷史中增加1條記錄,其中old值為0。

  • 當新職工部門或工資發生變化時,觸發器執行以下操作。若部門發生變動,則在變動歷史中增加1條記錄;若工資發生變動,則在工資變動歷史中增加1條記錄。

  • 四、實驗過程:

    創建數據庫:

    CREATE DATABASE emp;-- 創建員工表 CREATE TABLE employee ( eid CHAR (6) PRIMARY KEY, ename VARCHAR (10) UNIQUE, dept VARCHAR (10) UNIQUE, salary INT, uptime datetime, status char(1) ) --插入數據 INSERT INTO employee VALUES( '1001', 'zs', '軟開', 3000, CURRENT_TIMESTAMP, '1' );-- 創建部門變動歷史表 CREATE TABLE dept_history (dhid INT PRIMARY KEY AUTO_INCREMENT,eid CHAR (6),old VARCHAR (10),new VARCHAR (10),uptime datetime ) -- 創建工資變動歷史表 CREATE TABLE sal_history ( shid INT PRIMARY KEY AUTO_INCREMENT, eid CHAR (6), old INT, new INT, uptime datetime )

    問題一:當新職工入職時,員工信息表將插入1條數據。同時,觸發器在部門變動歷史中增加1條記錄,其中olddept值為null;在工資變動歷史中增加1條記錄,其中oldsal值為0。

    創建insert觸發器:

    DELIMITER $ CREATE TRIGGER emp_insert AFTER INSERT ON employee FOR EACH ROW BEGIN INSERT INTO dept_history ( eid, old, new, uptime )VALUES( new.eid, NULL, new.dept, new.uptime );INSERT INTO sal_history ( eid, old, new, uptime )VALUES( new.eid, 0, new.salary, new.uptime ); END$ DELIMITER ;

    問題二:當新職工部門或工資發生變化時,觸發器執行以下操作。若部門發生變動,則在變動歷史中增加1條記錄;若工資發生變動,則在工資變動歷史中增加1條記錄。

    創建update觸發器:

    DELIMITER $ CREATE TRIGGER emp_update AFTER UPDATE ON employee FOR EACH ROW BEGINIF(old.dept != new.dept) THENINSERT INTO dept_history ( eid, old, new, uptime )VALUES(new.eid, old.dept, new.dept, new.uptime );END IF;IF(old.salary != new.salary) THENINSERT INTO sal_history ( eid, old, new, uptime )VALUES(new.eid, old.salary, new.salary, new.uptime ); END IF; END$ DELIMITER ;

    五、實驗小結:

    觸發器觸發時間分為 before和 after,顧名思義,before代表觸發器里面的命令在修改數據之前執行,after代表觸發器里面的命令在修改數據命令之后執行。

    總結

    以上是生活随笔為你收集整理的数据库系统(四)——触发器的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。