使用数据库触发器来保证两张表数据的一致性
·
1.什么是触发器
在使用mysql数据库时,当我们对一个表进行数据操作时,需要同步对其它的表执行相应的操作。
如果在应用层或者数据库手动添加sql语句,则有不太方便,而且有短暂的数据不一致的现象。
触发器(TRIGGER):由事件来触发某个操作。这些事件包括INSERT语句、UPDATE语句和DELETE语句。当数据库系统执行这些事件时,就会激活触发器执行相应的操作。
2.触发器的类型
2.1DML触发器
当数据库中执行DML语句时,要执行的操作。主要用于在数据被修改时,强制执行业务规则,以及数据库约束,默认值和规则的完整性检查。
2.2DDL触发器
用于在响应DDL(数据库定义语句)时触发,一般用于在数据库中执行管理任务。例如,审核以及规范数据库操作。
3.业务场景和解决方法
业务场景:
第一张用户表,表结构如下:
id,username,password
第二张权限表,表结构如下:
authority_id, authorirty_name
第三张用户和权限的映射表,表示每个用户有什么权限,表结构如下:
id, user_id, authority_id
当实现用户注册功能时,其实是往用户表插入数据,但是,第三章表需要新生成的用户ID,才能建立用户和权限之间的关系。如果在应用层来实现,比较麻烦。这时,使用在数据库层的触发器解决,是最好的方法。
解决方法:
创建DML触发器:在用户表插入一条数据后,用新生成的用户id和权限 id在第三张表插入相应数据,以保障数据的一致性。
create trigger trigger_road_guodao_after_insert after insert
ON road_guodao FOR EACH ROW
insert road_guodao_version (action,road_id,update_by,update_time) values ('insert数据',new.id,(SELECT USER()), NOW());
4.总结
面对每种问题,有多种解决方法。我们要选择一种效率高,而且实现方便的方法,以得到问题的最优解。
DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。
更多推荐
所有评论(0)