【问题标题】:Trigger with condition on insert not inserting row在插入不插入行时触发条件
【发布时间】:2014-06-14 18:11:41
【问题描述】:

我正在使用 mysql,当有条件时,我需要在从表中插入时触发。

要在 Table1 上插入的信息是用户元数据,当有新用户注册时,它会插入 8 个新行。我希望在 metadata_key 为 'first name'

时触发触发器

我的问题是如果将这个条件放在触发器中,这个行永远不会插入,所以信息丢失并且触发器永远不会触发

这些是我的桌子:

+---------------------Table1---------------+ Table which fires the trigger AFTER INSERT 
+ user_id | meta_key     | meta_value      +
+ -----------------------------------------+
+      1  | first_name   | luke            +
+      1  | second_name  | skywalker       +
+------------------------------------------+

' 
+-----------------Table2------------------+ Where I need to INSERT
+ post_author | post_content | post_title +
+ ----------------------------------------+
+        0    | hub         | luke        +
+-----------------------------------------+

代码

DROP TRIGGER IF EXISTS  `post` ;

CREATE DEFINER =  `anagomez`@`localhost` TRIGGER `post` AFTER INSERT ON  `table1` 

FOR EACH ROW INSERT 

if(new.meta_key='first_name') then

insert into table2(post_author,post_content,post_title) values ('0','hub',new.meta_value);

end if

有什么建议吗?

【问题讨论】:

  • 不应该是if(new.metadata_key='first_name') then 而不是new.meta_key
  • 谢谢,其实是meta_key和meta_value,我在例子里写错了,但是在代码里没问题

标签: mysql triggers phpmyadmin


【解决方案1】:

你的触发器几乎是正确的,但有一个小问题,它应该看起来像

delimiter //

CREATE DEFINER =  `anagomez`@`localhost` TRIGGER `post` AFTER INSERT ON  `table1` 

FOR EACH ROW  
BEGIN

   if(new.meta_key='first_name') then

     insert into table2(post_author,post_content,post_title) values ('0','hub',new.meta_value);

   end if;
end; //
delimiter ;

我添加了分隔符,问题是您缺少BEGIN,而是添加了INSERT

【讨论】:

  • 问题是我在 phpMyAdmin 中工作,所以它有一个用于触发器、程序的在线编辑器......我想我不需要分隔任何东西,只需编写应该的代码在分隔符内,我错了吗?
  • 好吧,我不确定 PHPAmyadmin,您可以尝试不使用分隔符,当您在​​ mysql 终端上运行触发器时需要它。但是是的,如果您将 BEGIN 和 END 添加到触发器中,它应该可以工作。
  • 好吧,Table2 正在触发另一个触发器来更新 Table1,所以我们有两个触发器,第一个来自 Table1 AFTER INSERT 和第二个来自 Table2 AFTER UPDATE。所以看起来冲突是因为 Table1 正在被修改,而 Table2 正在尝试更改某些内容,它可能被锁定。我该如何解决这个问题才能让它发挥作用?
  • hmm 那么当在 table2 上更新它在 table1 上插入新记录后触发触发器时?或其更新?如果更新,那么应该没问题,但是如果使用 first_name 作为 meta_key 插入,那么这将是一种死锁的情况。
猜你喜欢
  • 1970-01-01
  • 2011-10-05
  • 2019-07-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-03-08
  • 2013-06-11
  • 2014-03-12
相关资源
最近更新 更多