• Home
  • Articles
    • 日志
    • 妍小言
    • 舒小书
    • 浩然说
    • 生活日记
  • All Tags

mysql触发器测试

04 Nov 2016

Reading time ~1 minute

触发器测试

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

测试对象: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引擎同样在触发器未执行完成时新增数据对其他会话不可见



mydqlDBtrigger