文章目录
一、任务
- result 备份
1. ALTER TABLE result RENAME TO result_2021_8;
2. CREATE TABLE result LIKE result_2021_8
- result_ddr 备份
1. ALTER TABLE result_ddr RENAME TO result_ddr_2021_8;
2. CREATE TABLE result_ddr LIKE result_ddr_2021_8
- php 应用
//测试ddr失败设备数据统计
public function backupFaildDdrData(){
$total = $this -> getDdrTotal(-1,-1,null);
if($total < MAX_TABLE_ROWNUM){//总数据不超过120w,数据不需要备份和重置!
return array('code'=>-2,'total'=>$total);
}
$dataStr = date('Y')."_".date('m');
$sqlTbExist = "SHOW TABLES LIKE 'result_ddr_$dataStr';";
$resTbExist= $this->db_getOne($sqlTbExist);
if(!$resTbExist){
//重命名表 result_ddr
$sqlRename = "ALTER TABLE result_ddr RENAME TO result_ddr_$dataStr";
$code = $this->db_update($sqlRename);
//复制表结构
if($code){
$sqlCopy = "CREATE TABLE result_ddr LIKE result_ddr_$dataStr";
$this->db_query($sqlCopy);
}
return array('code'=>1,'total'=>$total);
}else{
return array('code'=>-3,'total'=>$total);
}
}
二、SQL 场景
1、只复制表结构到新表
CREATE TABLE 新表SELECT * FROM 旧表WHERE 1=2
或CREATE TABLE 新表LIKE 旧表
2、复制表结构及数据到新表
CREATE TABLE 新表SELECT * FROM 旧表
这种方法会将oldtable中所有的内容都拷贝过来,当然我们可以用delete from newtable;来删除。
不过这种方法的一个最不好的地方就是新表中没有了旧表的primary key、Extra(auto_increment)等属性。需要自己用"alter"添加,而且容易搞错。
3、复制旧表的数据到新表(假设两个表结构一样)
INSERT INTO 新表SELECT * FROM 旧表
4、复制旧表的数据到新表(假设两个表结构不一样)
INSERT INTO 新表(字段1,字段2,…) SELECT 字段1,字段2,… FROM 旧表
5、可以将表1结构复制到表2
SELECT * INTO 表2 FROM 表1 WHERE 1=2
6、可以将表1内容全部复制到表2
SELECT * INTO 表2 FROM 表1
10、表不在同一数据库中(如,db1 table1, db2 table2)
sql: insert into db1.table1 select * from db2.table2 (完全复制)
insert into db1.table1 select distinct * from db2.table2(不复制重复纪录)
insert into tdb1.able1 select top 5 * from db2.table2 (前五条纪录)
11、重命名表
ALTER TABLE result_ddr RENAME TO result_ddr_9;