SQL将一张表的部分数据查询后插入到另一张表并同时删除从原表查询的数据,比如说是A、A_his两张表,其中A_his是A表的历史表,记录一些历史记录。同时Id,name,scores字段。要将从A表查询出来的部分数据放到历史表A_his中,并要同时删除原表的数据。如何写存储过程,规定凌晨执行!新手求教...急...
事物开始
读出数据,并存放到临时表,
把临时表插入到目标表中
把源表中的数据删除,使用where id in (select id from 临时表)
删除临时表
事物结束
提交事物
步骤一:insert into A_His select * from A where ...(注意这里的where条件。)
步骤二:delete A where (注意这里的条件要和上文一样)
步骤三:使用SQL Agent定时在0点执行。
没必要这么干啊,A表加个字段标识下就行了,每次将标识列改变下状态就OK了。规定时间执行,可以用SQL计划,安装SQL时注意要选全了,不然出不来,Express版是没有计划的。
学习了
更新历史表内容
mysql> select * from A;
+----+---------+--------+
| Id | name | scores |
+----+---------+--------+
| 1 | xiaoyi | 88 |
| 2 | xiaoer | 89 |
| 3 | xiaosan | 90 |
| 4 | xiaosi | 91 |
+----+---------+--------+
4 rows in set (0.00 sec)
mysql> select * from A_his;
+----+---------+--------+
| Id | name | scores |
+----+---------+--------+
| 1 | xiaoyi | 88 |
| 2 | xiaoer | 98 |
| 3 | xiaosan | 87 |
| 4 | xiaosi | 91 |
+----+---------+--------+
drop procedure if exists sp1;
delimiter //
create procedure sp1(a int)
begin
delete from A_his where Id = a;
insert into A_his select * from A where Id = a;
select * from A_his;
end//
delimiter ;
mysql> call sp1(2); -- 显示更新后的A_his 表的内容
+----+---------+--------+
| Id | name | scores |
+----+---------+--------+
| 1 | xiaoyi | 88 |
| 2 | xiaoer | 89 |
| 3 | xiaosan | 87 |
| 4 | xiaosi | 91 |
+----+---------+--------+
4 rows in set (0.09 sec)