mysql触发器用于在另一个表中的新行之后更新表

时间:2016-03-17 14:47:19

标签: mysql wordpress triggers

我目前正在使用Wordpress网站,我想知道是否有可能创建一个更新wordpress帖子的触发器,具体为post_content列,在我插入一个新的在另一张表中排。

假设我将此表命名为persons,并创建了四列IDpost_IDzipCodenamepost_idwordpress_posts表的外键。

我在wordpress中创建了一个帖子,其中应显示persons表中的所有新条目。这篇文章有ID 1。

我的更新触发器应该是什么样子才能让它工作?

我试过这个,没有运气:

BEGIN

   UPDATE wp_posts
   (wp_posts.post_content) WHERE wp_posts.ID = postID;
   VALUES
   (persons.zipCode, persons.name);

END;

错误讯息:

#1064 - you have an error in your sql syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '(wp_posts.posts_content) WHERE wp_posts.ID = postID; VALUES (persons.zipC' at line 4

非常感谢一些解释!

3 个答案:

答案 0 :(得分:2)

我认为,您没有读取UPDATE语法的MySQL参考,并且您没有看到任何MySQL触发器的示例。 另一个问题是,您尝试使用两个wp_posts列更新一个人列。您必须使用字符串连接。

尝试这样的事情:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace sample
{
    class Program
    {
        static void Main(string[] args)
        {
            System.Xml.XmlTextReader reader = new System.Xml.XmlTextReader("C:\\Users\\ADMIN\\Pictures\\test.xml");
            string contents = "";
            while (reader.Read())
            {
                reader.MoveToContent();
                if (reader.NodeType == System.Xml.XmlNodeType.Element)
                    contents += "<" + reader.Name + ">\n";
                if (reader.NodeType == System.Xml.XmlNodeType.Text)
                    contents += reader.Value + "\n";
            }
            Console.Write(contents);
            Console.ReadLine();
        }

    }
}

答案 1 :(得分:1)

这实际上是一个标准的审计跟踪触发器。实际上,您可以使用 BEFORE 触发器,但从概念上讲, AFTER 触发器更有意义。但是,必要的是,这是一个 ROW 触发器,因为它正在利用写入触发表的数据。

ROW 触发器不应该,并且在大多数数据库上都不允许查询它所连接的表,因为这可能违反ACID一致性规则。 (这是所谓的&#34;变异表&#34;问题。)相反, ROW 触发器可以访问伪记录 OLD NEW ,表示其修改导致触发器触发的单行。 OLD 在发布DML语句之前包含行数据 NEW 包含数据< em>在DML语句提交后它将是。您可以将这些记录中的字段作为表限定字段名称访问,其中 OLD NEW 作为表名称,例如。 OLD.col1NEW.col2&amp; c。

BEFORE ROW 触发器中,您实际上可以修改 NEW 的内容,从而更改将要写入的内容,但我们不会#39这里需要这样做。

我假设您要将新数据附加到现有帖子;我们使用可变参数CONCAT函数来做到这一点。完整的语法是

CREATE TRIGGER log_wp_update
  AFTER INSERT
  ON persons
  FOR EACH ROW
    UPDATE wp_posts
      SET post_content = CONCAT(post_content, ' ', NEW.zipCode, ' ', NEW.name)
      WHERE ID = 1;

由于此触发器的主体是一个简单的 UPDATE 语句,因此无需将其包含在BEGIN ... END;中,也无需使用{{1如果您的客户需要它们,请使用指令。

我希望有所帮助。如果您需要任何澄清,请不要犹豫。

答案 2 :(得分:0)

这将创建触发器:

AppDependencyResolver.Current.CreateUoWinCurrentThread()

但我还不清楚你要把什么放在wp_posts.post_content中。

此致