mysql备份同库中一张表的历史记录 insert into …select
需求
如今有个这么一个需求。mysql中有个表。数据增长的非常快。可是呢这个数据有效期也就是1个月,一个月曾经的记录不太重要了,可是又不能删除。为了保证这个表的查询速度,须要一个简单的备份表,把数据倒进去。
代码
于是我写了一个小脚本,用来做定时任务。把这个表某段时间的数据备份到备份表中。核心就是个简单的sql。
下面以新表(test_table_new)和旧表(test_table_old)为例
CREATE TABLE IF NOT EXISTS `test_table_new` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`pic_url` varchar(200) NOT NULL,
`pic_thumb` varchar(200) DEFAULT NULL,
`pic_desc` varchar(200) DEFAULT NULL,
`borough_id` int(11) NOT NULL,
`creater` varchar(20) DEFAULT NULL,
`addtime` int(11) DEFAULT NULL,
PRIMARY KEY (`id`),
KEY `borough_id` (`borough_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=97289 ;
备份1
Insert into Table2(field1,field2,...) select value1,value2,... from Table1
> 例子
Insert into test_table_new select * from test_table_old where `borough_id`>=10266 and `borough_id`
备份2
Select * Into new_table_name from old_table_name;
> 测试
Select * Into test_table_new1 from test_table_old where `borough_id`>=10266 and `borough_id` <=12354
- 执行后错误
错误:
#1327 - Undeclared variable: test_table_new
网上找到提示要求目标表Table2不存在,因为在插入时会自动创建表Table2,并将Table1中指定字段数据复制到Table2中
删除新表,再次执行
还是错误,查一下发现原来 mysql 数据库是不支持 SELECT INTO FROM 这种语句的,但是经过研究是可以通过另外一种变通的方法解决这个问题的
备份3
Create table Table2 (Select * from Table1);
Create table pic_test (Select * from test_table_old where `borough_id`>=10266 and `borough_id` <=12354);
欢天喜地,执行成功