1

我在数据库中有以下三个(InnoDB-)表MySQL

Entity (DLID)
Category (CatID, CatName)
hasCategory (DLID, CatID)

现在,在插入表格时,hasCategory我想确保每个Entity都与至少一个相关联Category。因此,我编写了以下触发器:

delimiter |

create trigger Max before insert on hasCategory for each row begin
    if  (exists (select distinct DLID from Entity where not exists (select distinct new.DLID from new))) then
        signal sqlstate '45000'
            set message_text = 'Min of 1 category per entity required';
    end if;
end|

delimiter ;

现在,当我执行以下查询时:insert into hasCategory values (1, 1);我得到了错误error code 1146: table mydb.new does not exist。我创建了一些与此类似的其他触发器,也指的是新表,它工作得非常好。然而,我不明白是什么导致了这个特定触发器中的错误。

select声明是否可能引起一些麻烦?我读过只有select into语句在程序中有效,但我不知道这是否与此有关。

谢谢你的帮助!

4

1 回答 1

1
select distinct new.DLID from new

new就像错误状态一样,您的数据库中没有表。您可以使用NEW将插入触发器中的记录,但不能将其用作表名并从中进行选择。

尝试

if (select 1 from Entity where DLID = new.DLID) = 1 then
于 2012-11-14T17:56:16.387 回答