トリガーに奇妙な問題があります。「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
「プロファイル」にレコードを1つずつ追加して、正しく機能するかどうかを確認すると、トリガーは正常に機能しました。しかし、多くのレコードが同時に追加されると (毎秒 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 によって行われます。