我有一個觸發器的奇怪問題。我想插入數據到名爲'profile'的表中,並且我想讓觸發器填充'profile'的某些列,如果它存在於名爲'profile_info'的另一個表中的話。如果它在'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完成。
我會給它一個嘗試,讓你知道。我知道我應該先把觸發器正確地寫在第一位:) – boran
我試過了,就像你說的,但它沒有幫助。顯示此錯誤的記錄在同一秒內添加,我認爲這可能是性能問題 – boran
如果您在啓動時鎖定配置文件會發生什麼情況 - 退出之前解鎖? – ethrbunny