景伟娜 陈红军 段林羽
摘要:数据库应用系统对数据库内的数据要求比较高,要求所设计的数据库能保证一定程度的数据完整性,从而保证有关联数据的一致性。本文中以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-),男,山西吕梁人,本科,计算机科学与技术。