0

我正在尝试使用 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)团队。Teams 有列“team_name”和“division” 游戏有列“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'表中的'division'填充分区列,其中team_name = team_a。

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

经过一些调试,我相信我的错误在于: select Division into @div_a from encex_autoschedTeams where team_name = new.team_a;

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

4

2 回答 2

0

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

这里错误的原因是您将除法列保留为NOT NULL并且查询/触发结果无法获取该除法列的值。所以它引发了错误

于 2012-11-21T18:54:13.283 回答
0

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

于 2012-11-22T02:16:01.837 回答