触发从源表和另一个表插入数据

时间:2014-06-03 20:18:58

标签: mysql variables triggers

我正在使用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$$;

1 个答案:

答案 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的任何独立插入,所有插入都是通过触发器完成的

Demo

  

请注意,您仅使用触发器进行插入,因此它仅适用于   insert,但如果你更新table1的数据,那么table3将不会   为此更新,您还需要更新触发器

     

也不要使用单引号表/列名来代替使用   反向标记以逃避保留关键字