我从未使用过存储过程或函数,只使用了最少的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更新我的表吗?
此外,有没有办法按计划自动运行这些更新?
提前谢谢!希望这是有道理的,这是我的第一篇文章,长期读者。
答案 0 :(得分:0)
安排查询
nightly_update.sql
。nightly_update.sql
。 (现在您可以在MySQL中使用source
命令执行所有这些查询:source nightly_update.sql;
。请注意,您应首先执行use your_db_name;
在Linux上,使用crontab创建定时任务。任务应该是: 在指定的时间执行shell脚本。
emacs -nw /etc/crontab
,添加以下行:
00 1 * * * root /home/my/mytable_auto_update.sh // every 1:00 am to run this script
编写前面提到的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
使用sudo service cron restart
重启crond。
您应该使用某种策略来避免重复的SQL语句,例如:在nightly_update.sql
之后删除source
,然后在新查询到达时创建一个新的。{/ p>
使用json
更新您的表格据我所知,您可以在插件的帮助下制作它。而MySQL提供了一个 InnoDB memorycached Plugin为您提供NoSQL风格的接口。
此外,memorycached插件并不常用,这不是推荐的方法。如果您对此感兴趣,请仔细阅读本手册。