2012-11-21 78 views
0

我想創建一個使用MAMP爲一個joomla2.5應用程序的MySQL觸發器。 我的觸發器:MYSQL觸發器返回空錯誤

CREATE TRIGGER `getDivision` BEFORE INSERT ON `encex_autoschedGames` 
FOR EACH ROW BEGIN 

select division into @div_a from encex_autoschedTeams where team_name = new.team_a; 
set new.division = @div_a; 

END 

我不斷收到以下錯誤:

Column 'division' cannot be null 

故事:

我有兩個表:1)遊戲2)團隊。 隊有列 'TEAM_NAME' 和 '師' 奧運會上,有coloumns 'team_a', 'team_b' 和 '師'

示例表:

Teams table: 

Team_name, Division 
"team1","A" 
"Team2","A" 
"Team3","A" 
"Team4","A" 
"Team5","B" 
"Team6","B" 
"Team7","B" 
"Team8","B" 

對於遊戲的表,我想師來自於團隊表。所以當我插入TEAM1對TEAM2它自動填充師爲A.

Games Table: 
Team_a, Team_b, Division 
"Team1", "Team2", "A" 

我想創建一個觸發器,這樣,當在遊戲表創建一個排它從'Te'填入分區欄ams'表,其中team_name = team_a。

理想情況下,我會構建它,以確保team_a和team_b的分配相同,但是我認爲小步驟最適合這裏。

經過一番調試,我相信我的錯誤在: 從encex_autoschedTeams中選擇劃分爲@div_a,其中team_name = new.team_a;

由於某種原因,where子句返回null。經過一些命令行測試後,它不應該是。也許New.team_a不正確?

回答

0

原始代碼完美地工作。這個問題是由於在代碼中解析了一個字符串,並且很難在team_names字符串中看到空格。查詢返回null,因爲它不匹配「team1」到「team1」。

0

我認爲你不需要使用觸發器來解決這個問題,首先需要一個簡單的存儲過程來存儲遊戲中的數據和團隊中的相應記錄。這將是非常好的。此外,當您使用觸發器時,性能也會降低,因爲每次插入記錄時都會運行該觸發器,並且如果您將網站提供給託管站點,則需要專門的託管服務器在數據庫中創建觸發器。

這裏錯誤的原因是您保留劃分列爲NOT NULL並且查詢/觸發結果無法獲取該劃分列的值。所以它正在引發錯誤

+0

謝謝你的迴應。你能解釋一個簡單的存儲過程是什麼意思嗎?我是MYSQL的新手。此外,我確實將分區coloum設置爲NOT NULL,但我不明白爲什麼無法獲取分區列的值。我使用where子句錯了嗎? – Jglstewart

+0

我試着更新「set new.division = @div_a;」以「更新gamestable設置分區= @ div_a」。我得到了完全相同的錯誤。我誤解了嗎? – Jglstewart

+0

讓它在插入之後而不是在插入之前 – Chella