选择触发器工作不正确

时间:2012-10-13 09:50:59

标签: mysql triggers

触发器有一个奇怪的问题。我想将数据插入名为'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从多台计算机完成。

1 个答案:

答案 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;