MySQL查询存储在一个表中以更新另一个表中的值

时间:2018-01-09 00:25:41

标签: mysql sql join stored-procedures stored-functions

我从未使用过存储过程或函数,只使用了最少的JOIN函数。

是否有办法在一个地方(表,存储过程或存储函数)中存储多个查询,以更新另一个表中的记录。理想情况下,我希望安排这些查询每晚运行。

我的TABLE不断添加新记录,LINK通常为NULL,但我需要根据某些条件填充它(我已经为此示例简化了)。我使用PRODUCT&一些其他列,以确定LINK值是什么。

查询示例:

  

更新TABLE集LINK =' XYZ'其中PRODUCT =' X&#39 ;;

     

更新TABLE集LINK =' A'其中PRODUCT =' A'和STYLE =' SAMPLE';

     

更新TABLE集LINK =' C'其中PRODUCT =' C'和STYLE =' SAMPLE1';

     

更新表格集LINK =' C2'其中PRODUCT =' C'和STYLE =' SAMPLE2';

一种可能的解决方案是创建第二个表格:PRODUCT =' X' = LINK =' XYZ'我可以使用JOIN更新我的表吗?

此外,有没有办法按计划自动运行这些更新?

提前谢谢!希望这是有道理的,这是我的第一篇文章,长期读者。

1 个答案:

答案 0 :(得分:0)

安排查询

  1. 创建一个文本文件,例如nightly_update.sql
  2. 逐行将这些查询添加到nightly_update.sql。 (现在您可以在MySQL中使用source命令执行所有这些查询:source nightly_update.sql;。请注意,您应首先执行use your_db_name;
  3. 在Linux上,使用crontab创建定时任务。任务应该是: 在指定的时间执行shell脚本。

    emacs -nw /etc/crontab,添加以下行:
    00 1 * * * root /home/my/mytable_auto_update.sh // every 1:00 am to run this script

  4. 编写前面提到的shell脚本。以下是如何在shell脚本中执行SQL命令的示例:

    mysql -u$DB_USER -h$DB_HOST -P$DB_PORT -p$DB_PASS <<\EOF // you don't need an '\' in your code use $DB_NAME; source nightly_update.sql; EOF

  5. 使用sudo service cron restart重启crond。

  6. 您应该使用某种策略来避免重复的SQL语句,例如:在nightly_update.sql之后删除source,然后在新查询到达时创建一个新的。{/ p>

    使用json

    更新您的表格

    据我所知,您可以在插件的帮助下制作它。而MySQL提供了一个 InnoDB memorycached Plugin为您提供NoSQL风格的接口。

    此外,memorycached插件并不常用,这不是推荐的方法。如果您对此感兴趣,请仔细阅读本手册。