一般在java web项目开发的过程中,都会有sql的备份,执行与回滚操作,这里简单的介绍一下
sql备份
create table t_table140427 as select * from t_table;
[注]这个语句只对表的数据进行了备份,但是表的索引,约束等都没有进行备份
sql执行
sql执行,这里我要说的是,有些项目组会这样做
1,创建表,修改表的字段,修改表的约束等综合放在一个文件
2,表的初始化,更新,插入综合放在一个文件
3,创建函数,创建存储过程等放在一个文件里
但是有些项目却会把所有的sql综合成一个文件,这里需要考虑的问题就有
1,执行sql先后顺序的问题,必须考虑那些sql必须先执行,那些sql必须后执行,两者之间是否有关联关系
2,如果sql中存储过程,匿名块,函数等,如果是命令行执行的话,这必须在每一个单独的sql后单独一行加"/",否则将导致该sql编译失败-----Warning: Procedure created with compilation errors
sql的回滚
在项目组中,经常看到有人会在回滚表的时候,是这样写的
drop table t_table; create table t_table as select * from t_table140427;
殊不知,这样回滚数据会把数据的约束,及与该表相关的触发器一起都drop掉,我曾经就这样干过,导致与那个表相关的触发器被干掉了,唉...
一般回滚操作使用
TRUNCATE TABLE t_table; insert into t_table select * from t_table140427; commit;
使用TRUNCATE 要注意的一点就是,如果t_table有外键约束,则需要想把这个外键disable掉,之后插入ok之后,在enable该外键