1

我的触发器有一个奇怪的问题。我想将数据插入一个名为“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 完成的。

4

1 回答 1

0

what happens if you change it to:

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;
于 2012-10-13T11:54:53.700 回答