MYSQL触发器返回null错误

时间:2012-11-21 18:46:19

标签: mysql triggers

我正在尝试使用MAMP为joomla2.5应用程序创建一个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'和' division'

样本表:

Teams table:

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

对于游戏桌,我希望该部门来自Teams表。所以当我插入Team1 Vs Team2时,它会自动将该部门填充为A。

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

我想创建一个触发器,以便在游戏表中创建一行时,它会在分区列中填充“分区”字样。来自' Teams' table_name = team_a。

理想情况下,我会构建它,以确保team_a和team_b的划分相同,但我认为这里的小步骤最好。

经过一些调试后,我相信我的错误是:     从encex_autoschedTeams中选择划分为@div_a,其中team_name = new.team_a;

由于某种原因,where子句返回null。经过一些命令行测试,它不应该是。也许New.team_a不对吗?

2 个答案:

答案 0 :(得分:0)

我认为你不需要使用触发器来解决这个问题首先需要一个简单的存储过程来存储游戏中的数据和团队中的相应记录。这将是非常好的。此外,当您使用触发器时性能也会降低,因为每次插入记录时它都会运行,如果您将网站提供给托管站点,则需要使用专用托管服务器在数据库上创建触发器。

此处出现错误的原因是您将分区列保留为 NOT NULL ,并且查询/触发器结果无法获取该分区列的值。所以它提出了错误

答案 1 :(得分:0)

原始代码完美无缺。问题是由于在代码中先前解析了一个字符串并在team_names字符串中留下了一个难以看到的空间。该查询返回null,因为它没有将“team1”与“team1”匹配。