我从未使用过存储过程或函数,只使用了很少的连接函数。
有没有一种方法可以将多个查询存储在一个位置(表、存储过程或存储函数)以更新另一个表中的记录。理想情况下,我希望将这些查询安排为每晚运行。
我的表不断地添加新的记录,link通常为null,但我需要根据一些条件填充它(我已经简化了这个示例)。我使用product和其他一些列来确定链接值是什么。
查询示例:
update table set link='xyz'其中product='x';
update table set link='a'其中product='a'和style='sample';
update table set link='c'其中product='c'和style='sample1';
update table set link='c2'其中product='c'和style='sample2';
一个可能的解决方案是创建第二个表:product='x'=link='xyz'然后我是否可以使用连接来更新我的表?
另外,有没有办法按计划自动运行这些更新?
提前谢谢!希望它有意义,这是我的第一篇文章,长期读者。
1条答案
按热度按时间ars1skjm1#
计划查询
创建文本文件,例如。
nightly_update.sql
.将这些查询添加到
nightly_update.sql
一行一行(现在您可以使用source
mysql中的命令: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
重新启动crondsudo service cron restart
.您应该使用某种策略来避免重复的sql语句,例如删除
nightly_update.sql
在你之后source
然后在新查询到达时创建一个新的查询。用json更新表
据我所知,你可以借助插件来制作。mysql提供了一个innodb内存缓存插件,为您提供nosql风格的接口。
另外,memorycached插件并不流行,这也不是推荐的方法。如果你对手册感兴趣,请仔细检查一下。