触发器有一个奇怪的问题。我想将数据插入名为'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
当我逐个添加记录到'profile'以检查它是否正常工作时,触发器工作正常。但是,当同时添加许多记录(每秒超过1500)时,问题就开始发生了。添加到配置文件中的某些记录包含错误的info1,info2,info3列。例如,在'profile'表中,我有以下值:
| 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从多台计算机完成。
答案 0 :(得分:0)
如果将其更改为:
会发生什么select info1, info2, info3, id from
profile_info where id = new.id into @i1, @i2, @i3, @id;
If @id is null THEN
insert into profile_info (id) values (new.id);
ELSE
set new.info1 = @i1;
set new.info2 = @i2;
set new.info3 = @i3;
END IF;