景偉娜 陳紅軍 段林羽
摘要:數據庫應用系統對數據庫內的數據要求比較高,要求所設計的數據庫能保證一定程度的數據完整性,從而保證有關聯數據的一致性。本文中以MySQL中的DML觸發器應用在人事管理數據庫為例,介紹了如何利用觸發器實現表與表之間的數據一致性。
關鍵詞:觸發器;完整性;數據一致
一、引言
數據庫的完整性是指保護數據庫中數據的正確性、有效性和相容性,防止錯誤的數據進入數據庫造成無效操作,本部分內容在數據庫課程教學中屬于難點。本文主要介紹作為數據完整性實施的方法之一的觸發器在數據庫應用中(本文以人事管理應用系統為例)的使用以增強本知識塊的掌握。
二、觸發器介紹
MySQL中的DML觸發器通過用戶對數據庫中表的操作觸發,由于觸發器是由操作觸發的過程,因此可以利用觸發器進行維護表間數據的一致性。
創建觸發器的語法格式如下:
create trigger 觸發器名
before | after
insert | delete | update
on 表名
for each row
<觸發體>
觸發器名即創建的觸發器的名字;before | after即觸發時間,在操作前還是操作后觸發;insert | delete | update即對表進行的添加、刪除、更新的觸發操作;表名即在哪個表上進行的操作;for each row表示任何記錄執行對應操作都會觸發觸發器;觸發體里包含了觸發時要執行的SQL語句。
觸發器將沒有操作之前的狀態保存到old關鍵詞:中,將操作后的狀態保存到new關鍵詞:中,語法為old/new.字段名。需要注意的是,insert型觸發器只有new,new 表示將要(插入前)或者已經(插入后)增加的數據;update型觸發器既有old也有new,old表示更新之前的數據,new表示更新之后的數據;delete型觸發器只有old,old 表示將要(刪除前)或者已經(刪除后)被刪除的數據。
三、觸發器在人事管理中的應用
1、人事管理數據庫介紹
因篇幅所限,本文僅以2個數據表中部分字段介紹使用觸發器實現表間數據的一致性。
員工表,包含員工的編號、姓名、部門編號等。部門表,包含部門的編號,名稱等。兩個表的創建語句如下:
create table e (?????????? #員工表
e_no int(6)primary key, #編號
e_name varchar(12),?? #姓名
d_no int(4))?????????? #所在部門編號
create table d(?????????? #部門表
d_no int(4)primary key,#編號
d_name varchar(20))?? #名稱
2、觸發器在數據庫中的應用
(1)觸發器在數據添加時示例
delimiter @@
create trigger t_e_i
before insert
on e
for each row
begin
declare m varchar(20);
if new.d_no not in(select d_no from dept)then
select x into m;
end if;
end@@
delimiter ;
MySQL不能在insert觸發器中對本表直接進行insert、update、delete操作,也不能通過回滾事務取消操作,但如果觸發器的SQL語句執行過程中出現錯誤,會自動撤銷操作,曲線實現事務回滾。當往員工表中添加已存在部門編號的員工信息時,添加成功;添加不存在部門編號的員工信息時,添加失敗。
(2)觸發器在數據更新時示例
create trigger t_d_u
after update
on d
for each row
update e set d_no=new.d_no;
where d_no=old.d_no;
當把部門表中部門編號為0801修改為0802時,員工表中部門編號為0801的員工記錄中的部門編號也被修改為0802。
(3)觸發器在數據刪除時示例
create trigger t_d_d
after delete
on d
for each row
delete from e
where d_no=old.d_no;
當把部門表中部門編號為0802的部門記錄刪除時,員工表中部門編號為0802的員工記錄也被刪除。
四、總結
在數據庫設計時為了保持數據表中數據的一致性,可以采用觸發器作為實現方法之一。通過合理設計和使用觸發器,保證數據的完整性,以提高數據庫的安全性和完整性,但觸發器操作自動觸發的特點,也會給后期運行維護帶來風險。
參考文獻:
[1]陳志泊.數據庫原理及應用教程(第4版)[M].北京:人民郵電出版社,2019:276-279.
[2]李月軍 付良延.數據庫原理及應用(MySQL版)[M].北京:清華大學出版社,2021:111-113.
[3]陳虹.觸發器在學生成績管理數據庫中的應用研究[J].數碼設計,2021(20):85-88.
[4]沈黎.基于網絡數據庫的存儲過程和觸發器應用研究[J].西南師范大學學報,2016(41):51-55.
[5]李虎軍.SQL Server觸發器應用探析[J].電腦知識與技術,2016(16):13-15.
作者簡介:
景偉娜(1977-),女,河南襄縣人,碩士,副教授,研究方向:云計算技術及數據分析。
陳紅軍(1971-),男,河南葉縣人,碩士,副教授,研究方向:數據庫應用。
段林羽(2001-),男,山西呂梁人,本科,計算機科學與技術。