我正在使用mysql 5.5而我正在尝试定义一个触发器。
以下是我的表格。
+------Table1------+ SOURCE: The one which pulls the trigger + id | post_title + +------------------+ + 1 | title1 + + 2 | title2 + +------------------+
+------Table2-------+ Where I need to get the information. + id | nicename + Note: Table1.post_title = Table2.nicename +-------------------+ + 99 | title1 + + 86 | title2 + +-------------------+
+----------Table3---------------+ DESTINATION: Where I need to insert + id | meta_key | meta_value + Note: Table1.id = Table3.meta_value +-------------------------------+ Table2.id= Table3.id + 99 | hub_page | 1 + + 86 | hub_page | 2 + +-------------------------------+
这是我写的查询,但它返回:#1064 - 您的SQL语法中有错误;查看与您的MySQL服务器版本对应的手册,以便在第6行附近使用正确的语法
DELIMITER $$
CREATE TRIGGER 'trigger_name' AFTER INSERT ON
'table1' FOR EACH ROW
BEGIN
DECLARE user_id int;
SELECT id into user_id from table2 where(table2.nicename = new.post_title);
INSERT INTO table3(id,metakey,metavalue) VALUES(user_id,'hub_page',new.id);
END$$;
答案 0 :(得分:0)
根据你的触发器定义,表示在table3上插入后运行它,但在你的问题中,似乎你需要在表1上插入后运行它,对table1的注释触发触发器的那个所以我假设你需要在table1上插入一行,当table1发生插入时,在触发器中你需要从table2获取数据,你可以重写你的触发器
CREATE TRIGGER new_table1_trigger
AFTER INSERT ON
`Table1` FOR EACH ROW
INSERT INTO table3(id,meta_key,meta_value) VALUES(
(SELECT id from table2 where table2.nicename = new.post_title LIMIT 1),
'hub_page',
new.id);
在下面的演示中,您会注意到我使用了table3的任何独立插入,所有插入都是通过触发器完成的
请注意,您仅使用触发器进行插入,因此它仅适用于 insert,但如果你更新table1的数据,那么table3将不会 为此更新,您还需要更新触发器
也不要使用单引号表/列名来代替使用 反向标记以逃避保留关键字