Mysql 在触发器中选择工作不正确

Mysql 在触发器中选择工作不正确,mysql,triggers,Mysql,Triggers,我的扳机有个奇怪的问题。我想将数据插入名为“profile”的表中,如果“profile”存在于另一个名为“profile\u info”的表中,我想让触发器填充“profile”的某些列。如果“profile\u info”中不存在该记录,则触发器应将该记录的id添加到“profile\u info”中,以便稍后填写 CREATE TRIGGER `info_filler` BEFORE INSERT ON `profile` FOR EACH ROW begin select info1

我的扳机有个奇怪的问题。我想将数据插入名为“profile”的表中,如果“profile”存在于另一个名为“profile\u info”的表中,我想让触发器填充“profile”的某些列。如果“profile\u info”中不存在该记录,则触发器应将该记录的id添加到“profile\u 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的值错误,它们的值属于另一行。此外,这些行不会添加到“配置文件信息”中。1、4、5和7正常,7也添加到“配置文件信息”中

我知道,我不应该将相同的信息复制到另一个表中,我也在处理这个问题。但现在我需要这个触发器来工作,我不知道我做错了什么。任何帮助都将不胜感激


我正在使用mysql 5.5和innodb。插入由python从多台计算机完成。

如果将其更改为:

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;

我会试试,让你知道。我知道我应该首先正确地编写触发器:)我已经像你说的那样试过了,但是没有用。显示此错误的记录是在同一秒添加的,我认为这可能是性能问题如果在触发器开始时锁定配置文件-退出前解锁会发生什么?