首页 新闻 会员 周边

Mysql转储

0
[已解决问题] 解决于 2017-08-24 13:55

我创建了个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 $$

求大神指点

偷得浮生半日眠的主页 偷得浮生半日眠 | 菜鸟二级 | 园豆:202
提问于:2017-08-24 10:02
< >
分享
最佳答案
0

发下你运行出现的问题

奖励园豆:5
金琥 | 老鸟四级 |园豆:2605 | 2017-08-24 10:33

错误代码: 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

偷得浮生半日眠 | 园豆:202 (菜鸟二级) | 2017-08-24 11:03

@偷得浮生半日眠: 

你的语法写错了

INSERT IGNORE 与INSERT INTO的区别就是INSERT IGNORE会忽略数据库中已经存在 的数据,如果数据库没有数据,就插入新的数据,如果有数据的话就跳过这条数据。这样就可以保留数据库中已经存在数据,达到在间隙中插入数据的目的。
eg:
insert ignore into table(name)  select  name from table2

 

所以应该写成:INSERT IGNORE into tb_park_plate_copy

金琥 | 园豆:2605 (老鸟四级) | 2017-08-24 11:18

还有“date_time”写成这样:`date_time`

因为在网上看到

1064错误一般出现在表名或者字段名设计过程中出现了mysql关键字导致的。例如假设我误用了code这个关键字做了字段名 MSSQL中关键字需要用‘[ ]’ 括起来。即[code]即可

Mysql中呢,找了下资料,使用的时候用  `code` 如果不仔细看你一定以为是单引号,最初我也是这样认为的,但经实践发现用了单引号也是无法通过验证的,

后来找了下详细说明才明白,不是单引号而是英文字母上面的那一行数字键,数字键的左边有一个键,上面是~ ,下面的是、这个键 。

 

金琥 | 园豆:2605 (老鸟四级) | 2017-08-24 11:26

@金琥: 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的复合语句不行?

偷得浮生半日眠 | 园豆:202 (菜鸟二级) | 2017-08-24 11:43

@偷得浮生半日眠: delete语句不是应该是:DELETE FROM 表名 WHERE 删除条件  ,这样的吗?

金琥 | 园豆:2605 (老鸟四级) | 2017-08-24 13:44

http://www.jb51.net/article/39199.htm

我觉得是你的删除语句写错了

金琥 | 园豆:2605 (老鸟四级) | 2017-08-24 13:45

@金琥: 恩,确实是删除语句写错了,谢谢哈

偷得浮生半日眠 | 园豆:202 (菜鸟二级) | 2017-08-24 13:54
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册