1

データベースに次の3つの(InnoDB-)テーブルがありMySQLます。

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

ここで、テーブルに挿入するときに、それぞれが少なくとも1つに関連付けられてhasCategoryいることを確認したいと思います。したがって、私は次のトリガーを作成しました。EntityCategory

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エラー状態と同じように、DBにはテーブルがありません。トリガーに挿入されるレコードには使用NEWできますが、テーブル名として使用して選択することはできません。

試す

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