我的触发器有一个奇怪的问题。我想将数据插入一个名为“profile”的表中,如果它存在于另一个名为“profile_info”的表中,我希望触发器填充“profile”的某些列。如果它在“profile_info”中不存在,则触发器应将记录的 id 添加到“profile_info”以供稍后填写。
CREATE TRIGGER `info_filler` BEFORE INSERT ON `profile`
FOR EACH ROW begin
select info1, info2, info3, id from
profile_info where id = new.id into @i1, @i2, @i3, @id;
set new.info1 = @i1;
set new.info2 = @i2;
set new.info3 = @i3;
If @id is null THEN
insert into profile_info (id) values (new.id);
END IF;
end
当我将记录一一添加到“配置文件”以检查它是否正常工作时,触发器工作正常。但是,当同时添加许多记录(每秒超过 1500 条)时,就会出现问题。添加到配置文件中的某些记录具有错误的 info1、info2、info3 列。例如,在“个人资料”表中,我的值如下:
| id | info1 | info2 | info3 |
|-----------|------------|------------|------------|
| 1 | 10 | 23 | 12 |
| 2 | 10 | 23 | 12 |
| 3 | 10 | 23 | 12 |
| 4 | 7 | 42 | 73 |
| 5 | 5 | 45 | 33 |
| 6 | 5 | 45 | 33 |
| 7 | NULL | NULL | NULL |
我的问题是第 2、3、6 行的 info1、info2 和 info3 值错误,它们的值属于另一行。这些行也不会添加到“profile_info”中。1, 4, 5 和 7 没问题, 7 也添加到“profile_info”中。
我知道,我不应该将相同的信息复制到另一个表,我也在努力。但现在我需要这个触发器才能工作,我不知道我做错了什么。任何帮助将非常感激。
我正在使用 mysql 5.5 和 innodb。插入是由多台计算机上的 python 完成的。