我尝试了以下示例。但它没有插入。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( )
我不确定这是否可以通过触发器来完成。但是你可以制作一个shell脚本,并执行mysql命令
测试.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
然后将 shell 脚本的执行添加为 cron 作业,/etc/crontab
如下所示:
0 6 * * * root php /path/to/script/./test.sh
每天早上 6:00 执行
附言。这只是如何完成它的一个想法:D
编辑: 或者你可以制作mysql 事件
“触发器是与表相关联的命名数据库对象,并且在表发生特定事件时激活”
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() 代替。您是否真的按照建议阅读了有关触发器的信息?——Kay Nelson 41 秒前