ITPub博客

首页 > Linux操作系统 > Linux操作系统 > 清除用户下所有的数据(清库)

清除用户下所有的数据(清库)

原创 Linux操作系统 作者:壹頁書 时间:2013-11-11 00:15:20 0 删除 编辑
我们的项目出于测试、演示或者研发自己觉得清爽的原因,经常需要清除数据库中的数据。
但是表间定义了大量的外键关联,删除数据还需要遵从一定的业务关系,非常麻烦。
我们的小伙伴通常都是Drop user xxx cascade;然后找到初始化脚本重新来过。
其实可以在删除表数据之前,先禁用外键约束,删除之后,再启动约束。

首先,创建雇员表和部门表,并且创建一个外键约束。
SQL> create table emp as select * from hr.employees;

表已创建。

SQL> create table dept as select * from hr.departments;

表已创建。

SQL> alter table emp add constraints pk_emp primary key (employee_id);

表已更改。

SQL> alter table dept add constraints pk_dept primary key (department_id);

表已更改。

SQL> alter table emp add constraints fk_dept foreign key (department_id) references dept(department_id);

表已更改。

部门表不能先于雇员删除,否则报错。
SQL> delete from dept;
delete from dept
*
第 1 行出现错误:
ORA-02292: 违反完整约束条件 (LIHUILIN.FK_DEPT) - 已找到子记录

SQL> truncate table dept;
truncate table dept
               *
第 1 行出现错误:
ORA-02266: 表中的唯一/主键被启用的外键引用

创建禁用约束的命令

  1. SQL> select 'alter table '||table_name||' disable constraint '||constraint_name||';' from user_constraints;

  2. \'ALTERTABLE\'||TABLE_NAME||\'DISABLECONSTRAINT\'||CONSTRAINT_NAME||\';\'
  3. --------------------------------------------------------------------------------
  4. alter table EMP disable constraint SYS_C0011146;
  5. alter table EMP disable constraint SYS_C0011147;
  6. alter table EMP disable constraint SYS_C0011148;
  7. alter table EMP disable constraint SYS_C0011149;
  8. alter table DEPT disable constraint SYS_C0011150;
  9. alter table EMP disable constraint FK_DEPT;
  10. alter table EMP disable constraint PK_EMP;
  11. alter table DEPT disable constraint PK_DEPT;

  12. 已选择8行。
执行命令禁用约束,然后创建删除数据的命令。

  1. SQL> select 'truncate table '||table_name||';' from user_tables;

  2. \'TRUNCATETABLE\'||TABLE_NAME||\';\'
  3. ----------------------------------------------
  4. truncate table DEPT;
  5. truncate table EMP;
执行Truncate命令,最后启用约束

  1. SQL> truncate table DEPT;

  2. 表被截断。

  3. SQL> truncate table EMP;

  4. 表被截断。


  5. SQL> select 'alter table '||table_name||' enable constraint '||constraint_name||';' from user_constraints;

  6. \'ALTERTABLE\'||TABLE_NAME||\'ENABLECONSTRAINT\'||CONSTRAINT_NAME||\';\'
  7. --------------------------------------------------------------------------------
  8. alter table EMP enable constraint SYS_C0011146;
  9. alter table EMP enable constraint SYS_C0011147;
  10. alter table EMP enable constraint SYS_C0011148;
  11. alter table EMP enable constraint SYS_C0011149;
  12. alter table DEPT enable constraint SYS_C0011150;
  13. alter table EMP enable constraint PK_EMP;
  14. alter table DEPT enable constraint PK_DEPT;
  15. alter table EMP enable constraint FK_DEPT;

  16. 已选择8行。

关于约束的命令
ALTER TABLE table_name ENABLE/DISABLE/DROP CONSTRAINT constraint_name;
关于索引的命令
ALTER INDEX index_name VISABLE/INVISABLE/REBUILD/REBUILD ONLINE/UNUSABLE;




来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/29254281/viewspace-776260/,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2013-10-19

  • 博文量
    621
  • 访问量
    5940207