成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

Oracle數據庫Constraint約束的常用操作及異常處理

數據庫 Oracle
本文我們主要介紹了Oracle數據庫Constraint約束的一些常用的操作及約束異常的處理,希望能夠對您有所幫助。

繼上次我們介紹了:Oracle數據庫中Constraint約束的四對屬性,本次我們就介紹一下Oracle數據庫Constraint約束的常用操作及異常處理,接下來就讓我們來一起了解一下這部分內容。

1.報告約束異常

如果校驗約束時存在異常,則返回一個錯誤,且完整性約束仍保持未被校驗狀態。當約束存在異常時,一個語句就不能正確執行,則此語句被回滾。如果存在異常,必須要更新或刪除了約束的所有異常后,才可以校驗約束。但是在使用ALTER TABLE語句不能確定哪一行違反約束,為了確定哪一行,在發布ENABLE子句中帶有EXCEPTION選項的ALTER TABLE語句。

EXCEPTION選項將ROWID、OWNER、TABLE、ROWID、CONSTRAINT放到一個指定的表中。在啟用約束前,硬創建一個合適的異常報告表,用來接收ENABLE子句的EXCEPTION選項信息,可以直接執行'?\rdbms\admin\utlexcpt.sql'或'?\rdbms\admin\utlexcpt1.sql'腳本來進行創建。注意:這兩個腳本的區別在于數據庫的兼容性級別和所分析的表的類型。

使用的語法如下:

ALTER TABLE dept ENABLE PRIMARY KEY EXCEPTIONS INTO EXCEPTIONS;

或者

alter table team disable validate constraint id_num EXCEPTIONS INTO EXCEPTIONS;--這個方法不創建索引

如果存在異常,則直接查詢 SELECT * FROM EXCEPTIONS; 即可。如果需要更加詳細的信息,則可以使用ROWID與原表的ROWID進行關聯,這樣就可以查出原始表中當前行的所有信息,并進行修改。

如何利用EXCEPTIONS來處理實踐中的一些問題:

(1)在已有的constraint上加載數據

先disable,再加載數據,然后enable and EXCEPTIONS INTO EXCEPTIONS,根據EXCEPTIONS表的紀錄delete,最后再enable。

(2)新建constraint,原有的數據違反了這個約束

先create disable,再enable and EXCEPTIONS INTO EXCEPTIONS

以下是一個新建外鍵的例子:

  1. alter table team add constraint id_num foreign key(id) references games(scores) INITIALLY disable;  
  2.  
  3. alter table team enable constraint id_num EXCEPTIONS INTO EXCEPTIONS;  
  4.  
  5. select * from EXCEPTIONS; 

2.關于contraint的一些常見操作

定義約束:

  1. alter table t add constraint ch_100 unique(id) disable ;  
  2.  
  3. alter table t add constraint ch_100 unique(id);  
  4.  
  5. alter table t add constraint ch_100 unique(id) deferred deferrable novalidate;  
  6.  
  7. CREATE TABLE dept_20  
  8.  
  9. (employee_id NUMBER(4),  
  10.  
  11. commission_pct NUMBER(7,2),  
  12.  
  13. department_id,  
  14.  
  15. CONSTRAINT fk_deptno  
  16.  
  17. FOREIGN KEY (department_id)  
  18.  
  19. REFERENCES departments(department_id)  
  20.  
  21. on delete/set null cascade);  
  22.  
  23. ALTER TABLE dept_20  
  24.  
  25. ADD CONSTRAINT fk_empid_hiredate  
  26.  
  27. FOREIGN KEY (employee_id, hire_date)  
  28.  
  29. REFERENCES hr.job_history(employee_id, start_date)  
  30.  
  31. EXCEPTIONS INTO EXCEPTIONS;  
  32.  
  33. CREATE TABLE divisions  
  34.  
  35. (div_no NUMBER CONSTRAINT check_divno  
  36.  
  37. CHECK (div_no BETWEEN 10 AND 99)  
  38.  
  39. DISABLE,  
  40.  
  41. div_name VARCHAR2(9) CONSTRAINT check_divname  
  42.  
  43. CHECK (div_name = UPPER(div_name))  
  44.  
  45. DISABLE,  
  46.  
  47. office VARCHAR2(10) CONSTRAINT check_office  
  48.  
  49. CHECK (office IN ('DALLAS','BOSTON',  
  50.  
  51. 'PARIS','TOKYO'))  
  52.  
  53. DISABLE); 

注:在使用外鍵參考了PRIMARY或UNIQUE鍵時,不能停用或刪除被參考約束

延遲校驗的啟用停用:

  1. SET CONSTRAINT(s) unq_num/all immediate;  
  2.  
  3. SET CONSTRAINT(s) unq_num/all deferred; 

停用:

  1. ALTER TABLE dept DISABLE CONSTRAINT dname_ukey;  
  2.  
  3. ALTER TABLE dept DISABLE PRIMARY KEY KEEP INDEX,  
  4.  
  5. DISABLE UNIQUE (dname, loc) KEEP INDEX; 

啟用非校驗:

  1. ALTER TABLE dept ENABLE CONSTRAINT dname_ukey;  
  2.  
  3. ALTER TABLE dept ENABLE NOVALIDATE PRIMARY KEY,  
  4.  
  5. ENABLE NOVALIDATE UNIQUE (dname, loc); 

啟用校驗:

  1. ALTER TABLE dept MODIFY CONSTRAINT dname_ukey VALIDATE;  
  2.  
  3. ALTER TABLE dept MODIFY PRIMARY KEY ENABLE NOVALIDATE; 

若要停用/刪除相關的FOREIGN KEY約束,則:

ALTER TABLE dept DISABLE PRIMARY KEY CASCADE;

刪除:

  1. ALTER TABLE dept DROP UNIQUE (dname, loc);  
  2.  
  3. ALTER TABLE emp DROP PRIMARY KEY KEEP INDEX,  
  4.  
  5. DROP CONSTRAINT dept_fkey; 

關于Oracle數據庫Constraint約束的一些基本操作就介紹到這里了,希望本次的介紹能夠對您有所收獲!

【編輯推薦】

  1. 數據庫集群中間件CJDBC詳細介紹
  2. SQL Server 2005無法連接到本地服務器的解決
  3. Linux下重新配置MySQL數據庫引擎innodb的過程
  4. SQL Server通過整理索引碎片和重建索引提高速度
  5. Linux+Oracle 10g RAC雙網卡綁定和解除綁定的實現
責任編輯:趙鵬 來源: CSDN博客
相關推薦

2011-08-10 15:38:12

ConstraintOracle

2011-05-26 14:43:49

ORACLE數據庫異常處理

2011-05-26 10:30:12

Oracle數據庫約束

2009-03-23 10:11:59

Oracle數據庫唯一約束

2011-05-26 14:31:57

Oracle數據庫

2011-04-07 15:47:28

MySQL數據庫

2017-12-26 15:10:30

數據庫Oracle操作語句

2011-08-01 13:59:22

Oracle數據庫命名空間

2010-04-06 16:50:07

Oracle數據庫

2010-05-07 13:28:43

Oracle數據庫

2010-04-30 14:39:03

Oracle數據庫

2010-04-06 11:02:30

Oracle 數據庫

2011-01-21 11:12:01

Spring

2011-05-26 13:36:40

Oracle數據庫時間處理

2011-09-02 10:06:51

OracleSqlLoad常用技巧

2011-01-06 09:28:19

SQL語句

2019-12-03 09:00:59

Oracle數據庫等待事件

2011-07-12 16:41:14

mysql處理異常

2010-04-07 14:22:46

2009-05-18 13:18:54

字符Oracle字符串
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 久久91精品国产一区二区 | 国产成人综合一区二区三区 | 国产精品久久av | 色黄视频在线 | 成人免费视频网站在线看 | 午夜精品 | 亚洲av一级毛片 | 91资源在线播放 | 在线视频国产一区 | 国产精品久久久爽爽爽麻豆色哟哟 | 久久爱综合 | 亚洲成人精品一区二区 | 91成人| 亚洲激情一区二区 | 亚洲激情在线 | 男人的天堂久久 | 超碰在线免费公开 | 91丨九色丨国产在线 | 免费观看一级特黄欧美大片 | 亚洲精视频 | 色综合九九 | 二区成人| 三极网站| 欧美亚洲综合久久 | 一级做a爰片久久毛片 | 涩涩视频在线播放 | av男人的天堂av | 久久久久久成人 | 亚洲精品久| 999免费视频 | 久草热播 | 免费在线播放黄色 | 久草色视频 | 黄色免费网站在线看 | 亚洲成人在线免费 | 日本一区二区三区在线观看 | 国产成人精品久久 | 视频一区在线观看 | 亚洲综合色丁香婷婷六月图片 | av网站免费 | 欧美精品一二区 |