modules というテーブルがあり、次のロジックを適用したいのですが、最適な方法がわかりません。更新と挿入のトリガーを追加することを考えていましたが、トリガー コードに問題がありました。
module_sub_id がゼロより大きい場合は、module_sub_id が module_id として存在するかどうかを確認します。ゼロの場合、行を親レコードと見なします。
私がやろうとしているアイデアは、子レコードを持つことができる親レコードを持ち、それらの間に外部キー関係を持つ別のテーブルを持たないことです。
CREATE TABLE `jlimited_test2`.`modules` (
`module_id` int( 11 ) NOT NULL AUTO_INCREMENT
, `module_sub_id` int( 11 ) NOT NULL default '0'
, `module_name` varchar( 100 ) CHARACTER SET utf8 NOT NULL
, `module_active` int( 11 ) NOT NULL
, PRIMARY KEY ( `module_id` )
) ENGINE = MYISAM DEFAULT CHARSET = latin1;
これが私のトリガーのコードです。
CREATE TRIGGER myTrigger
BEFORE INSERT ON modules
FOR EACH ROW
BEGIN
IF NEW.module_sub_id > 0 THEN
IF NOT (
SELECT count(*)
FROM modules
WHERE module_id = NEW.module_sub_id
) = 1 THEN
INSERT ignore()
END IF;
END IF;
END$$