之後,調用觸發我有一個非常簡單的數據庫具有以下模式:MySQL的:事務被提交
video (id, title, description)
category (id, name)
tag (id, name)
video_category_reference (video_id, category_id)
video_tag_reference(video_id, tag_id)
abc_table (video_id, description, categories)
前五表使用InnoDB引擎。
最後一個表 - abc_table
使用MyISAM引擎,它包含某種「緩存」。 description
列存儲結果CONCAT(video.title, video.description, GROUP_CONCAT(tag.name))
和categories
列存儲結果GROUP_CONCAT(category.id)
。
我需要的是一個觸發器,將在創建新視頻後填充abc_table
。新的視頻將始終創建以同樣的方式:
START TRANSACTION;
INSERT INTO video VALUES(NULL, "My video", "description");
SET @vid = (SELECT LAST_INSERT_ID());
INSERT INTO video_category_reference VALUES (@vid, 1), (@vid, 2), (@vid, 3), (@vid, 4);
INSERT INTO video_tag_reference VALUES (@vid, 5), (@vid, 6), (@vid, 7), (@vid, 8);
COMMIT;
可惜我不能用這個觸發器:
CREATE TRIGGER after_insert_on_video AFTER INSERT ON video FOR EACH ROW BEGIN
SET @categories = (SELECT GROUP_CONCAT(category_id) FROM video_category_reference WHERE video_id = NEW.id GROUP BY video_id);
SET @tags = (SELECT GROUP_CONCAT(t.name) FROM video_tag_reference vtr JOIN tag t ON vtr.tag_id = t.id WHERE video_id = NEW.id GROUP BY video_id);
INSERT INTO video_search_table VALUES (NEW.id, CONCAT(NEW.title, NEW.raw_description, @tags), @categories);
END$$
...因爲它會插入之前*_reference
表將完成執行。
有沒有辦法強制MySQL在事務提交後執行觸發器?或者我必須爲*_referemce
表創建觸發器,這些表將修改abc_table
中的值?
有點棘手......但應該做的工作。 – Crozin 2011-02-11 19:26:24