有个表 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 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 本身能不能实现呢 ?
delete from a where year(time)=2009 and month(time)<=6; #对表a删除已备份的数据问题二select * from a union select * from b;问题三让高人回答。个人感觉你的备份间隔时间比较长,自动备份没必要,再说自动备份也不安全吧。顺便提一下,上面的备份应该启动一个事务,确保备份成功后再删除原表内已备份的数据。安全第一,效率第二
如何写一个语句能把 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) - 不推荐
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计划任务中定时运行。