0
我有一個表模塊,我想強制執行下面的邏輯,但我不確定最好的方法。我正在考慮添加更新和插入觸發器,但遇到觸發器代碼問題。在MySQL中維護列關係
如果module_sub_id大於零,則檢查module_sub_id是否存在爲module_id。如果ZERO則將該行視爲父記錄。
我試圖做的想法是有一個父記錄,它可以有子記錄,而不需要另外一個具有外鍵關係的表。
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$$
沒有什麼大不了的 - 但是你可以用一些換行符來設置你的代碼的格式,使它更具可讀性。 – 2012-01-14 04:00:44
你爲什麼故意讓自己難過?如果是1:N單向關係,則可以創建一個引用「父」列的新列,或者創建一個新表並使用它。沒有可預見的理由,你故意讓自己難過。 – jmkeyes 2012-01-14 04:03:15
層次結構是否應該有最大深度2,或孩子們自己是否有孩子? – outis 2012-01-14 10:35:03