触发器测试

本贴最后更新于 2944 天前,其中的信息可能已经时移世易

触发器测试

目的:验证触发器的整个操作属于同一个事务

测试对象:insert 触发器

测试目标:数据插入时,尽管触发器为 after insert 模式,插入数据也只有在执行完触发器动作之后才对其他 session 可见

环境准备:

-- 原表
create table trigger_test(id int primary key AUTO_INCREMENT, v int);
-- 数据备份表
create table trigger_test_2(id int, v int);
-- 临时数据表
create table v(v int)

-- 触发器
DELIMITER //
create trigger test_trigger after insert on trigger_test for each row
	begin
		insert into v select sleep(10);
		insert into trigger_test_2 values(new.id, new.v);
	end
//
DELIMITER ;

-- 希望在向插入trigger_test数据时,需向trigger_test_2插入成功之后,新的数据才对其他session可见

测试语句:

session 1 session 2
insert into trigger_test(v) values (1); select * from trigger_test;
无执行 sql select * from trigger_test_2;

结果:

  1. 新增数据在 10s 之后才对其他 session 可见
  2. 触发器执行报错,原表数据回滚

使用:

同步数据时,触发器使用__insert__语句向目的表同步数据。
同时有一个存储过程使用__insert ignore__向目的表同步存量数据。
该测试结果可保证触发器插入增量数据时不会因为__唯一约束__问题导致插入失败。

补充:

数据表使用 MyISAM 引擎同样在触发器未执行完成时新增数据对其他会话不可见

  • Java

    Java 是一种可以撰写跨平台应用软件的面向对象的程序设计语言,是由 Sun Microsystems 公司于 1995 年 5 月推出的。Java 技术具有卓越的通用性、高效性、平台移植性和安全性。

    3186 引用 • 8212 回帖
  • 数据库

    据说 99% 的性能瓶颈都在数据库。

    338 引用 • 705 回帖
  • 触发器
    2 引用

相关帖子

欢迎来到这里!

我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。

注册 关于
请输入回帖内容 ...