Mysql 在触发器中选择工作不正确
我的扳机有个奇怪的问题。我想将数据插入名为“profile”的表中,如果“profile”存在于另一个名为“profile\u info”的表中,我想让触发器填充“profile”的某些列。如果“profile\u info”中不存在该记录,则触发器应将该记录的id添加到“profile\u info”中,以便稍后填写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
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;
我会试试,让你知道。我知道我应该首先正确地编写触发器:)我已经像你说的那样试过了,但是没有用。显示此错误的记录是在同一秒添加的,我认为这可能是性能问题如果在触发器开始时锁定配置文件-退出前解锁会发生什么?