我创建了个event做定时转储任务,但是转储的sql语句有点问题,如下:
DELIMITER $$
CREATE EVENT IF NOT EXISTS bakup_plateinfo
ON SCHEDULE EVERY 1 DAY STARTS '2017-08-18 16:30:00'
ON COMPLETION PRESERVE
ENABLE
DO
BEGIN
INSERT IGNORE tb_park_plate_copy
SELECT * FROM tb_park_plate
WHERE date_time<DATE_SUB(CURDATE(),INTERVAL 3 DAY) AND confirm_status='Y';
DELETE * FROM tb_park_plate
WHERE date_time<DATE_SUB(CURDATE(),INTERVAL 3 DAY) AND confirm_status='Y';
INSERT IGNORE tb_park_plate_copy
SELECT * FROM tb_park_plate
WHERE date_time<DATE_SUB(CURDATE(),INTERVAL 2 MONTH) AND confirm_status!='Y';
DELETE * FROM tb_park_plate
WHERE date_time<DATE_SUB(CURDATE(),INTERVAL 2 MONTH) AND confirm_status!='Y';
END $$
求大神指点
发下你运行出现的问题
错误代码: 1064
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '* FROM tb_park_plate
WHERE date_time<DATE_SUB(CURDATE(),INTERVAL 3 DAY) AND conf' at line 10
@偷得浮生半日眠:
你的语法写错了
INSERT IGNORE 与INSERT INTO的区别就是INSERT IGNORE会忽略数据库中已经存在 的数据,如果数据库没有数据,就插入新的数据,如果有数据的话就跳过这条数据。这样就可以保留数据库中已经存在数据,达到在间隙中插入数据的目的。
eg:
insert ignore into table(name) select name from table2
所以应该写成:INSERT IGNORE into tb_park_plate_copy
还有“date_time”写成这样:`date_time`
因为在网上看到
1064错误一般出现在表名或者字段名设计过程中出现了mysql关键字导致的。例如假设我误用了code这个关键字做了字段名 MSSQL中关键字需要用‘[ ]’ 括起来。即[code]即可
Mysql中呢,找了下资料,使用的时候用 `code` 如果不仔细看你一定以为是单引号,最初我也是这样认为的,但经实践发现用了单引号也是无法通过验证的,
后来找了下详细说明才明白,不是单引号而是英文字母上面的那一行数字键,数字键的左边有一个键,上面是~ ,下面的是、这个键 。
@金琥: DELIMITER $$
CREATE EVENT IF NOT EXISTS bakup_plateinfo
ON SCHEDULE EVERY 1 DAY STARTS '2017-08-18 16:30:00'
ON COMPLETION PRESERVE
ENABLE
DO
BEGIN
INSERT IGNORE tb_park_plate_copy
SELECT * FROM tb_park_plate
WHERE date_time<DATE_SUB(CURDATE(),INTERVAL 3 DAY) AND confirm_status='Y';
-- DELETE * FROM tb_park_plate WHERE date_time
<DATE_SUB(CURDATE(),INTERVAL 3 DAY) AND confirm_status='Y';
INSERT IGNORE tb_park_plate_copy
SELECT * FROM tb_park_plate
WHERE date_time<DATE_SUB(CURDATE(),INTERVAL 2 MONTH) AND confirm_status!='Y';
-- DELETE * FROM tb_park_plate WHERE date_time
<DATE_SUB(CURDATE(),INTERVAL 2 MONTH) AND confirm_status!='Y';
END $$
我刚把delete语句注释了就正常了,难道insert和delete的复合语句不行?
@偷得浮生半日眠: delete语句不是应该是:DELETE FROM 表名 WHERE 删除条件 ,这样的吗?
http://www.jb51.net/article/39199.htm
我觉得是你的删除语句写错了
@金琥: 恩,确实是删除语句写错了,谢谢哈