我开始发现错误:
错误代码: 1109。字段列表中的未知表“LeaderBoard”
在实现以下触发器之后:
USE `broadside`;
DELIMITER $$
CREATE DEFINER=`root`@`localhost` TRIGGER `LeaderBoard_AINS`
AFTER INSERT ON `LeaderBoard`
FOR EACH ROW
BEGIN
if ((broadside.LeaderBoard.username= NEW.username) AND (broadside.LeaderBoard.userscore< NEW.userscore))
then
DELETE FROM `broadside`.`LeaderBoard`
WHERE (username = NEW.username AND userscore != NEW.userscore);
end if;
if (broadside.LeaderBoard.username= NEW.username AND broadside.LeaderBoard.userscore< NEW.userscore)
then
DELETE FROM `broadside`.`LeaderBoard`
WHERE (username = NEW.username AND userscore != NEW.userscore);
end if;
end表名为LeaderBoard,数据库名为右侧。它编译得很好,但是当我尝试插入一个元素时,触发器实际上被触发了,我得到了上面所示的1109错误。有人能帮忙吗?
发布于 2013-12-11 06:44:55
在if条件下,删除引用表并直接比较值。
Change
IF (
( broadside.LeaderBoard.username = NEW.username )
AND
( broadside.LeaderBoard.userscore < NEW.userscore )
) THEN 到:
IF (
( username = NEW.username ) AND ( userscore < NEW.userscore )
) THEN 顺便问一句:为什么你需要第二个条件?
指的是:MySQL论坛上类似的帖子
MySQL论坛::触发器::1109-字段列表中未知表“xyz”
发布于 2013-12-11 10:03:54
你必须这样做:
...
IF EXISTS(SELECT NULL FROM `leaderboard` WHERE `username` = NEW.`username` AND `userscore` < NEW.`userscore`) THEN
...但是,您会出现如下错误:
Error Code : 1442
Can't update table 'leaderboard' in stored function/trigger because it is already used by statement which invoked this stored function/trigger.当尝试执行DELETE时,引发:
B.5.MySQL 5.6常见问题:触发器:B.5.9:可以触发访问表吗? 触发器可以访问自己表中的旧数据和新数据。触发器也可以影响其他表,但不允许修改调用函数或触发器的语句已经使用(用于读取或写入)的表。
https://stackoverflow.com/questions/20509645
复制相似问题