有个表 aid  time        parameter1  parameter2
1    2009-07-02     1          aa
2    2009-07-02     2          bb
3    2009-06-02     12          cc
4    2009-05-01     32          aabb复制一个结构与a 相同的 表  b  第一个问题  
如何写一个语句能把  a里 某个时间比如6月份之前包括6月的数据记录 移动到 b表里(称之为归档)。 移动之后 b里面 应该 有记录3 4 a里面有记录1 2 。
第二个问题
执行一个查询 把 表a 和表 b的数据都查询出来, 就像 所有的数据仍然保存在表b 里面一样呢 。第三个问题
php 有没有办法实现一定的时间间隔能够自动执行  上面说的归档呢 ? 或者 mysql 本身能不能实现呢 ?

解决方案 »

  1.   

    问题一:create table b as (select * from a where year(time)=2009 and month(time)<=6); #备份到表b
    delete from a where year(time)=2009 and month(time)<=6; #对表a删除已备份的数据问题二select * from a union select * from b;问题三让高人回答。个人感觉你的备份间隔时间比较长,自动备份没必要,再说自动备份也不安全吧。顺便提一下,上面的备份应该启动一个事务,确保备份成功后再删除原表内已备份的数据。安全第一,效率第二
      

  2.   

    第一个问题  
    如何写一个语句能把  a里 某个时间比如6月份之前包括6月的数据记录 移动到 b表里(称之为归档)。 移动之后 b里面 应该 有记录3 4 a里面有记录1 2 。 

    只能分成两句SQL,一句无法实现。
    insert into b select * from a where time<'2009-07-01';
    delete from a where time<'2009-07-01';第二个问题 
    执行一个查询 把 表a 和表 b的数据都查询出来, 就像 所有的数据仍然保存在表b 里面一样呢 。 

    可以用UNION,但查询效率不高。常见的做法是使用partition table 来达到数据的分区。
    select * from a 
    union all
    select * from b
    第三个问题 
    php 有没有办法实现一定的时间间隔能够自动执行  上面说的归档呢 ? 或者 mysql 本身能不能实现呢 ? 

    PHP不能,因为PHP程序是在你点击页面请求的时候才执行。如果你的页面确保每个时间间隔都有人访问,则可以在这个页面的PHH中执行一下上述的两个SQL语句。
    一般归档是直接在数据库端实现。你可以
    1。使用操作系统上的计划任务(WINDOWS)/CRONTAB者说(LINUX)
    2。使用MYSQL5以上的(EVENT) - 不推荐
      

  3.   

    有个表 a id  time        parameter1  parameter2 
    1    2009-07-02    1          aa 
    2    2009-07-02    2          bb 
    3    2009-06-02    12          cc 
    4    2009-05-01    32          aabb 复制一个结构与a 相同的 表  b  第一个问题  
    如何写一个语句能把  a里 某个时间比如6月份之前包括6月的数据记录 移动到 b表里(称之为归档)。 移动之后 b里面 应该 有记录3 4 a里面有记录1 2 。 insert into b select * from a where time<='2009-06-30';
    delete from a where time<='2009-06-30';第二个问题 
    执行一个查询 把 表a 和表 b的数据都查询出来, 就像 所有的数据仍然保存在表b 里面一样呢 。 
    select * from a 
    union all
    select * from b
    第三个问题 
    php 有没有办法实现一定的时间间隔能够自动执行  上面说的归档呢 ? 或者 mysql 本身能不能实现呢 ?1、用mysql的even;
    2、用语言编制成可执行文件,在WINDOWS计划任务中定时运行。