如何将我的表复制到转储表并删除主表

时间:2015-11-04 10:02:55

标签: php mysql sql-server codeigniter

我正在使用mysql workbech作为后端工具处理php codeigniter框架...我对执行一个应该安排一个月的sql查询有疑问....就像我将清楚地解释它一样。 ..

我在该表中有一个名为数据包数据的表我每天将获得700K的记录,所以总共1个月我可能会得到200K记录...我的应用程序主要在这个表上运行因此,我的应用程序运行慢....

所以我想将每个月的数据移到转储表中,并且应该从主表中删除,以便我的应用程序可以快速运行....

每月应复制1个月的数据,并应从主表中删除.....

任何人都可以给我解决方法如何执行相同的删除和复制应该在同一查询中执行的查询....是否有可能告诉我....

2 个答案:

答案 0 :(得分:1)

您可以试试这段代码: -

INSERT INTO table1 (col`)  
SELECT col
  FROM table2
 WHERE month(col)=month(curdate() - INTERVAL 1 month)

答案 1 :(得分:0)

http://www.sitepoint.com/how-to-create-mysql-events/

您可以创建一个将执行此操作的mysql事件。上面的链接很好地解释了它,但MySQL事件是根据计划运行的任务。因此,我们有时将它们称为预定事件。创建事件时,您将创建一个命名数据库对象,其中包含一个或多个SQL语句,这些SQL语句将以一个或多个定期间隔执行,从特定日期和时间开始和结束。

还有一些其他选项,如cron事件,但是我建议使用mysql事件,因为它们是针对这些类型的查询而生成的。

网站链接有一个例子。

DELIMITER $$

CREATE 
    EVENT `archive_blogs` 
    ON SCHEDULE EVERY 1 WEEK STARTS '2011-07-24 03:00:00' 
    DO BEGIN

        -- copy deleted posts
        INSERT INTO blog_archive (id, title, content) 
        SELECT id, title, content
        FROM blog
        WHERE deleted = 1;

        -- copy associated audit records
        INSERT INTO audit_archive (id, blog_id, changetype, changetime) 
        SELECT audit.id, audit.blog_id, audit.changetype, audit.changetime 
        FROM audit
        JOIN blog ON audit.blog_id = blog.id
        WHERE blog.deleted = 1;

        -- remove deleted blogs and audit entries
        DELETE FROM blog WHERE deleted = 1;

    END */$$

DELIMITER ;
BTW:我不太了解您的数据库设计,业务模型甚至是您正在运行的查询类型,但如果您因备份原因复制数据,那么我会重新考虑您的数据库设计并考虑天气或者不需要将数据存储在另一个表中或将其作为csv文件导出,并将csv文件作为备份保存是更合适的。存储Csv文件可能是更好的解决方案,具体取决于天气或不需要在几个月内再次访问该数据。考虑一下,但创建一个mysql事件会做你想做的事。