清除使用者下所有的資料(清庫)
我們的專案出於測試、演示或者研發自己覺得清爽的原因,經常需要清除資料庫中的資料。
但是表間定義了大量的外來鍵關聯,刪除資料還需要遵從一定的業務關係,非常麻煩。
我們的小夥伴通常都是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: 表中的唯一/主鍵被啟用的外來鍵引用
建立禁用約束的命令
執行命令禁用約束,然後建立刪除資料的命令。
執行Truncate命令,最後啟用約束
關於約束的命令
ALTER TABLE table_name ENABLE/DISABLE/DROP CONSTRAINT constraint_name;
關於索引的命令
ALTER INDEX index_name VISABLE/INVISABLE/REBUILD/REBUILD ONLINE/UNUSABLE;
但是表間定義了大量的外來鍵關聯,刪除資料還需要遵從一定的業務關係,非常麻煩。
我們的小夥伴通常都是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: 表中的唯一/主鍵被啟用的外來鍵引用
建立禁用約束的命令
-
SQL> select 'alter table '||table_name||' disable constraint '||constraint_name||';' from user_constraints;
-
-
\'ALTERTABLE\'||TABLE_NAME||\'DISABLECONSTRAINT\'||CONSTRAINT_NAME||\';\'
-
--------------------------------------------------------------------------------
-
alter table EMP disable constraint SYS_C0011146;
-
alter table EMP disable constraint SYS_C0011147;
-
alter table EMP disable constraint SYS_C0011148;
-
alter table EMP disable constraint SYS_C0011149;
-
alter table DEPT disable constraint SYS_C0011150;
-
alter table EMP disable constraint FK_DEPT;
-
alter table EMP disable constraint PK_EMP;
-
alter table DEPT disable constraint PK_DEPT;
-
- 已選擇8行。
-
SQL> select 'truncate table '||table_name||';' from user_tables;
-
-
\'TRUNCATETABLE\'||TABLE_NAME||\';\'
-
----------------------------------------------
-
truncate table DEPT;
- truncate table EMP;
-
SQL> truncate table DEPT;
-
-
表被截斷。
-
-
SQL> truncate table EMP;
-
-
表被截斷。
-
-
-
SQL> select 'alter table '||table_name||' enable constraint '||constraint_name||';' from user_constraints;
-
-
\'ALTERTABLE\'||TABLE_NAME||\'ENABLECONSTRAINT\'||CONSTRAINT_NAME||\';\'
-
--------------------------------------------------------------------------------
-
alter table EMP enable constraint SYS_C0011146;
-
alter table EMP enable constraint SYS_C0011147;
-
alter table EMP enable constraint SYS_C0011148;
-
alter table EMP enable constraint SYS_C0011149;
-
alter table DEPT enable constraint SYS_C0011150;
-
alter table EMP enable constraint PK_EMP;
-
alter table DEPT enable constraint PK_DEPT;
-
alter table EMP enable constraint FK_DEPT;
-
- 已選擇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/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 查詢資料庫中的所有的普通使用者資料庫
- js清除所有的cookieJSCookie
- redis如何清除所有的keyRedis
- 清除SQL Server資料庫日誌SQLServer資料庫
- oracle清除資料庫表空間Oracle資料庫
- 通過現有的資料庫備份建立新的資料庫資料庫
- 檢視不同許可權使用者所擁有的物件物件
- linux清除oracle所有的sessionLinuxOracleSession
- SQL Server 清除資料庫日誌指令碼SQLServer資料庫指令碼
- 查詢某資料庫中所有的欄位資料庫
- 查詢使用者的系統許可權和使用者所擁有的角色
- 刪除使用者下的所有的objectObject
- oracle 資料庫徹底清除目錄指令碼Oracle資料庫指令碼
- STATSPACK資料清除(二)
- STATSPACK資料清除(一)
- STATSPACK資料清除(三)
- 解決Exchange OWA使用者登陸後有的使用者資料夾顯示中文有的顯示英文(轉貼)
- 刪除一個使用者下所有的物件物件
- SQL Server資料庫日誌清除的兩個方法SQLServer資料庫
- 更新、插入資料庫所使用的UPDATE() (轉)資料庫
- ORACLE使用者管理方式下備份資料和複製資料庫Oracle資料庫
- 新建資料庫使用者資料庫
- .NET關於資料庫操作的類-囊括所有的操作資料庫
- 核心創新,這才是國產資料庫該有的樣子資料庫
- 【OEM】怎樣手動清除OEM12的資料庫資料庫
- sql清除資料庫的連線(for sqlserver2000)SQL資料庫Server
- mysql 清除重複資料MySql
- 【轉】新建例項開啟已有的資料庫 — 資料庫與例項的區分測試資料庫
- 清除閃回資料歸檔區資料
- CAS配置資料庫,實現資料庫使用者認證資料庫
- 1.1.6. 資料庫使用者資料庫
- [資料庫中介軟體]centos6.6下配置libzdb所產生的錯誤資料庫CentOS
- 如何自動清除指定資料夾下的符號連結符號
- mac系統下清除eciplse svn外掛使用者資訊Mac
- linux下批量修改檔案及資料夾所Linux
- 如何清除 Elasticsearch 中的資料Elasticsearch
- 微信清除快取資料方法快取
- 清除 Nuxt 資料快取:clearNuxtDataUX快取