MySQL根据日期触发自动插入

时间:2013-07-11 07:19:24

标签: mysql triggers

我尝试了以下示例。但它没有插入。是where子句中的任何问题

CREATE DEFINER = `root`@`localhost` TRIGGER `new` AFTER INSERT ON `employee`
FOR EACH
ROW INSERT INTO employee_log( first_name, last_name )
SELECT first_name, last_name
FROM employee
WHERE start_date = now( )

2 个答案:

答案 0 :(得分:1)

我不确定是否可以使用触发器完成。但是你可以创建一个shell脚本,并执行mysql命令

test.sh:

#!/bin/bash
#delete everything from today_plan
mysql -e "DELETE FROM today_plan" --user=user_name --password=your_password db_name
#insert only todays plans to today_plan
mysql -e "INSERT INTO today_plan (pjtno, pattern, itemno, belt, kiln, qty, lnusr, distant,  remark, decww, plandate, nowdate, shipment) SELECT pjtno, pattern, itemno, belt, kiln, qty, lnusr, distant,  remark, decww, plandate, nowdate, shipment FROM daily_plan WHERE plandate=NOW()" --user=user_name --password=your_password db_name
exit

然后在/etc/crontab中将shell脚本的执行添加为cron作业,如:

0  6 * * * root php /path/to/script/./test.sh

每天早上6点执行它

PS。这只是如何完成它的一个想法:D

修改 或者你可以mysql event

答案 1 :(得分:1)

“触发器是与表关联的命名数据库对象,并且在表格发生特定事件时激活

http://dev.mysql.com/doc/refman/5.0/en/triggers.html

创建存储过程

    CREATE PROCEDURE yourdatabase.sp_plandate_process ()

    BEGIN
    // here you write the code to process the data
    END

创建活动

CREATE EVENT mysql.name_of_event
ON SCHEDULE
  EVERY 24 HOUR STARTS '2013-07-10 06:00:00'
COMMENT 'Write comment'
DO
CALL sp_plandate_process();

确保变量event_scheduler = 1,如果设置为0,则可以执行

SET event_scheduler=1;

这将启动事件调度程序的连接。

由于您更改了我再次编辑的问题

新答案:

  

可能是因为Now()应该是now()与它的值不同   是什么时候插入。员工hsa后触发器运行一次   插入。现在的值(0可能改变毫秒,但它   不会是一样的。除非你在where子句中使用sort desc,否则你   可以使用值new.id()代替。你真的读过了吗?   建议触发? - 凯尼尔森41秒前