當前位置:首頁 » 操作系統 » oracle資料庫約束

oracle資料庫約束

發布時間: 2022-08-07 15:23:35

㈠ 在導入Oracle資料庫的時候違反唯一約束條件是為什麼要怎麼解決

反唯一約束條件是主鍵重復。解決方法如下:

1、非空約束條件可以在建表時建立,也可以在建表後建立。如下圖。

㈡ oracle 資料庫的約束問題

create or replace trigger Trigger_Name
before insert or update
on Table_Name
for each row
begin
if :new.sal >100
then RAISE_APPLICATION_ERROR(-20000,'此列值不能超過100');
end if;
end;

㈢ ORACLE資料庫有哪幾種約束類型

主鍵PRIMARY KEY
唯一鍵 UNIQUE KEY
外鍵 FOREIGN KEY
非空 NOT NULL
還有CHECK鍵

㈣ 在 oracle11g系統中 約束的類型有哪些

ORACLE約束總結
你對ORACLE約束的了解如何?比較模糊還是相當透徹?如果你對下面幾個問題了如指掌的話,恭喜你,你已經對約束掌握得比較好了,不用看這篇文章了。ORACLE的約束有啥功能作用? 有哪些類型約束(不同版本ORACLE是否不同)?視圖有約束嗎?約束是否會影響SQL性能? 約束信息存儲在哪些系統視圖、數據字典中?約束能否修改名稱?能否禁用約束?延遲約束有啥好處.......
約束定義
約束是強加在表上的規則或條件。確保資料庫滿足業務規則。保證數據的完整性。當對表進行DML或DDL操作時,如果此操作會造成表中的數據違反約束條件或規則的話,系統就會拒絕執行這個操作。約束可以是列一級別的 也可以是表級別的。定義約束時沒有給出約束的名字,ORACE系統將為該約束自動生成一個名字,其格式為SYS_Cn,其中n為自然數(強烈建議各位在創建表或增加約束時,給約束定義名稱。).
約束功能
約束的功能:實現一些業務規則,防止無效的垃圾數據進入資料庫,維護資料庫的完整性(完整性指正確性與一致性)。從而使資料庫的開發和維護都更加容易。
約束分類
約束分為6類: 非空(NOT NULL)約束、 唯一(UNIQUE)約束、主鍵(PRIMARY KEY)約束、外鍵(FOREIGN KEY)約束、條件(CHECK)約束、REF約束。
非空(NOT NULL)約束:顧名思義,所約束的列不能為NULL值。否則就會報錯
唯一(UNIQUE)約束:在表中每一行中所定義的這列或這些列的值都不能相同。必須保證唯一性。否則就會違法約束條件。
主鍵(PRIMARY KEY)約束:唯一的標識表中的每一行,不能重復,不能為空。 創建主鍵或唯一約束後,ORACLE會自動創建一個與約束同名的索引(UNIQUENES為UNIQUE唯一索引)。需要注意的是:每個表只能有且有一個主鍵約束。
外鍵(FOREIGN KEY)約束:用來維護從表(Child Table)和主表(Parent Table)之間的引用完整性. 外鍵約束是個有爭議性的約束,它一方面能夠維護資料庫的數據一致性,數據的完整性。防止錯誤的垃圾數據入庫; 另外一方面它會增加表插入、更新等SQL性能的額外開銷,不少系統裡面通過業務邏輯控制來取消外鍵約束。例如在數據倉庫中,就推薦禁用外鍵約束。
條件(CHECK)約束:表中每行都要滿足該約束條件。條件約束既可以在表一級定義也可以在列一級定義。在一列上可以定義任意多個條件約束。
REF約束的定義:REF column by definition references an object in another object type or in a relational table. A REF constraint lets you further describe the relationship between the REF column and the object it references.
ORACLE 11 資料庫的約束類型如下:
ORACLE 10 資料庫的約束類型如下:
在oracle 官方文檔http://docs.oracle.com/cd/B19306_01/server.102/b14237/statviews_1037.htm下
C(check constraint on a table)
P(primary key)
U(unique key)
R(referential integrity)
V(with check option, on a view)
O(with read only, on a view)
http://docs.oracle.com/cd/B28359_01/server.111/b28286/clauses002.htm
http://docs.oracle.com/cd/B28359_01/server.111/b28320/statviews_1044.htm#REFRN20047
CCheck constraint on a table
PPrimary key
UUnique key
RReferential integrity
VWith check option, on a view
OWith read only, on a view
HHash expression
FConstraint that involves a REF column
SSupplemental logging
對於H、S類型,尚不清楚情況,而且從上面我在11g資料庫實驗結果看,也沒發現這兩種類型。(有了解的朋友可以告知一二)
約束命名規范
約束名稱建議自己定義一套命名規則,否則使用系統生成的約束名,很難能把它和對應的表、欄位聯系起來。
非空約束 NN_表名_列名
唯一約束 UK_表名_列名
主鍵約束 PK_表名
外鍵約束 FK_表名_列名
條件約束 CK_表名_列名
默認約束 DF_表名_列名
如果約束名稱超過32位長度,建議應該縮寫表名,而不應用NN_表名_數字。不過具體視情況而定,很多時候 DF_表名_列名 這樣命名,往往超出了32字元。所以有時候需要縮寫表面或是採用其它規則。
約束操作
約束管理
創建各類約束
先看一下如何創建主鍵約束
復制代碼
CREATE TABLE "DM"."DEPT"
(
"DEPTNO" NUMBER(2,0) PRIMARY KEY,
"DNAME" VARCHAR2(14),
"LOC" VARCHAR2(13)
) TABLESPACE "TBS_DM_DAT" ;
COMMENT ON TABLE "DM"."DEPT" IS '部門表';
COMMENT ON COLUMN "DM"."DEPT"."DEPTNO" IS '部門編號';
COMMENT ON COLUMN "DM"."DEPT"."DNAME" IS '部門名稱';
COMMENT ON CLOUMN "DM"."DEPT"."LOC" IS '部門所在地方';
復制代碼
此時它的約束名稱是系統創建的。如圖所示:
如果我們以下面的腳本創建,此時約束如下所示
復制代碼
1 CREATE TABLE "DM"."DEPT"
2 (
3 "DEPTNO" NUMBER(2,0),
4 "DNAME" VARCHAR2(14) ,
5 "LOC" VARCHAR2(13) ,
6 CONSTRAINT "PK_DEPT" PRIMARY KEY ("DEPTNO") USING INDEX TABLESPACE TBS_DM_IN
7 ) TABLESPACE "TBS_DM_DAT" ;
8
9
10
11
12 COMMENT ON TABLE "DM"."DEPT" IS '部門表';
13
14 COMMENT ON COLUMN "DM"."DEPT"."DEPTNO" IS '部門編號';
15
16 COMMENT ON COLUMN "DM"."DEPT"."DNAME" IS '部門名稱';
17
18 COMMENT ON CLOUMN "DM"."DEPT"."LOC" IS '部門所在地方';
19
復制代碼
如果一個表的約束類型比較多,你會看到一堆SYS_CN這樣的約束,如果不仔細核對後面的欄位,很難一眼看出約束類型、約束對應欄位。
主鍵約束的限制
文檔原文如下: (翻譯在下)
Restrictions on Primary Key Constraints Primary constraints are subject to the following restrictions:
A table or view can have only one primary key.
一個表或視圖有且只有一個主鍵
None of the columns in the primary key can be LOB, LONG, LONG RAW, VARRAY, NESTED TABLE, BFILE, REF, TIMESTAMP WITH TIME ZONE, or user-defined type. However, the primary key can contain a column of TIMESTAMP WITH LOCAL TIME ZONE.
主鍵欄位不能為LOB、LOG、LOG RAW、VARRAY、NESTED TABLE、BFILE、REF、TIMESTAMP WITH TIME ZONE或用戶定義類型。然而它可以包含TIMESTAMP WITH LOCAL TIME ZONE類型的欄位。
The size of the primary key cannot exceed approximately one database block.
主鍵大小不能超過一個數據塊大小。
A composite primary key cannot have more than 32 columns.
主鍵組合鍵不能超過32列。
You cannot designate the same column or combination of columns as both a primary key and a unique key.
你不能指定一列或組合列既是主鍵又是唯一鍵。
You cannot specify a primary key when creating a subview in an inheritance hierarchy. The primary key can be specified only for the top-level (root) view.
創建一個繼承層次結構中的子視圖時,你不能指定一個主鍵。主鍵可以唯一指定的頂層(根)視圖。
外鍵約束
ALTER TABLE childTable
ADD CONSTRAINT FK_xxxx_xxx
FOREIGH KEY(columnName)
REFERENCES parentTalbe(primaryKeyColumn) [ON DELETE CASCADE|SET NULL];
ON DELETE SET NULL子句:當主表中的一行數據被刪除時,Oracle系統會自動地將所有從表中依賴於它的數據記錄的外鍵改成空值;
ON DELETE CASCADE:當主表中的一行數據被刪除時,Oracle系統會自動地將所有從表中依賴於它的數據記錄刪除;
註:如果在外鍵定義中使用了ON DELETE SET NULL 或ON DELETE CASCADE,無論刪除操作是在父表這一端還是子表這一端都不會產生違反引用完整性的問題,但是卻留下了安全隱患。這兩個子句要謹慎使用,只有在不得已時使用,謹記謹記!!!
外鍵約束對DML與DDL的影響:
INSERT:只有操作是在子表或從表這一端時才會產生違反引用完整性約束的問題,父表則不然。
DELETE:只有操作是在父表或主表這一端時才會產生違反引用完整性約束的問題,子表則不然。
UPDATE:子表父表直接操作都會違反引用完整性約束。兩種解決方法:
1)先更新子表的引用列為空,再更新父表的主鍵的列的值,然後把子表的引用列更新成新的父表的值;
2)使用ON DELETE SET NULL,先更新父表,然後將子表外鍵為空的記錄更新為新的值。
DDL語句:DROP TABLE與TRUNCATE TABLE,操作父表,違反引用完整性約束,子表則不然。
外鍵約束的限制:
Restrictions on Foreign Key Constraints Foreign key constraints are subject to the following restrictions:
None of the columns in the foreign key can be of LOB, LONG, LONG RAW, VARRAY, NESTED TABLE, BFILE, REF, TIMESTAMP WITH TIME ZONE, or user-defined type. However, the primary key can contain a column of TIMESTAMP WITH LOCAL TIME ZONE.
外鍵欄位不能為LOB, LONG, LONG RAW, VARRAY, NESTED TABLE, BFILE, REF, TIMESTAMP WITH TIME ZONE, or user-defined type類型,主鍵可以包含數據類型為TIMESTAMP WITH LOCAL TIME ZONE的欄位。
The referenced unique or primary key constraint on the parent table or view must already be defined.
引用唯一或主鍵約束,必須是父表中已經定義的。
A composite foreign key cannot have more than 32 columns.
外鍵的組合列不能超過32列。
The child and parent tables must be on the same database. To enable referential integrity constraints across nodes of a distributed database, you must use database triggers. See CREATE TRIGGER.
字表和父表必須在同一個資料庫。分布式資料庫中,外鍵不能跨節點,但觸發器可以
If either the child or parent object is a view, then the constraint is subject to all restrictions on view constraints. See "View Constraints".
You cannot define a foreign key constraint in a CREATE TABLE statement that contains an AS subquery clause. Instead, you must create the table without the constraint and then add it later with an ALTER TABLE statement.
你不能在CREATE TABLE語句中包含AS子查詢子句定義一個外鍵約束。相反,你必須創建一個沒有約束的表,然後添加ALTER TABLE語句。
加上一些類似其它約束的限制.
條件約束
非空約束
非空約束的限制:
1: 你不能在視圖約束上指定欄位為NULL或NOT NULL值
2: 你不能指定一個對象的屬性為NULL或NOT NULL。相反,而應使用的IS [NOT] NULL條件CHECK約束
條件約束中的條件與查詢語句中的條件相同,但是不能包括以下內容:
1)CURRVAL,NETXTVAL,LEVEL和ROWNUM這樣的偽列(PSEUDOCOLUMNS);
2)引用其它行中值的查詢語句;
3)SYSDATE,USER,USERENV和UID的函數調用。
文檔原文如下:
Restrictions on NOT NULL Constraints NOT NULL constraints are subject to the following restrictions:
You cannot specify NULL or NOT NULL in a view constraint.
You cannot specify NULL or NOT NULL for an attribute of an object. Instead, use a CHECK constraint with the IS [NOT] NULL condition.
唯一約束
唯一約束的限制:
文檔原文如下:
Restrictions on Unique Constraints Unique constraints are subject to the following restrictions:
None of the columns in the unique key can be of LOB, LONG, LONG RAW, VARRAY, NESTED TABLE, OBJECT, REF, TIMESTAMP WITH TIME ZONE, or user-defined type. However, the unique key can contain a column of TIMESTAMP WITH LOCAL TIME ZONE.
當欄位類型為LOB、LOG、LONG RAW、 VARRAY、NESTED TABLE、OBJECT、REF、TIMESTAMP、用戶定義類型時,不能在欄位上定義唯一性約束。當數據類型為TIMESTAMP WITH LOCAL TIME ZONE
A composite unique key cannot have more than 32 columns.
組合欄位定義的唯一索引,欄位個數不能超過32個
You cannot designate the same column or combination of columns as both a primary key and a unique key.
你不能指定同一欄位或組合欄位即為主鍵又是唯一鍵
You cannot specify a unique key when creating a subview in an inheritance hierarchy. The unique key can be specified only for the top-level (root) view.
約束管理
刪除約束
復制代碼
ALTER TABLE DM.EMP
DROP CONSTRAINT SYS_C00115525;
CASCADE子句用來刪除存在有完整性關系的約束。當然你也可以用如下語法
ALTER TABLE DM.EMP
DROP UNIQUE (COMM);
復制代碼
添加約束
復制代碼
添加非空約束
ALTER TABLE DM.EMP
MODIFY(MGR CONSTRAINT CK_EMP_MGR NOT NULL);
添加其他約束
ALTER TABLE DM.EMP
ADD CONSTRAINT CK_EMP_SAL CHECK(SAL > 0 AND SAL <20000);
復制代碼
重命名約束
ALTER TABLE METAONE.T1
RENAME CONSTRAINT SYS_C0059699 TO PK_T1
約束維護
禁用約束
ALTER TABLE 表 DISABLE CONSTRAINT 約束名 [CASCADE];
ALTER TABLE DM.EMP
DISABLE CONSTRAINT UK_EMP_COMM;
ALTER TABLE TEST DISABLE PRIMARY KEY CASCADE;
參數CASCADE子句用來關閉存在有完整性關系的約束,比如DISABLE一個主鍵,如果沒有CASCADE子句就會出錯,此時使用CASCADE子句DISABLE主鍵可以將該主鍵與相關外鍵一起DISABLE掉。使用的情況:例如在資料庫系統中大規模裝入數據時,為了系統的效率您不得不犧牲數據的一致性來關閉一些約束,甚至刪除一些約束將主表主鍵禁止的同時,也將禁止依賴於此主鍵的外鍵禁止了.
使用上面腳本禁用約束的時候會刪除索引,如果你想禁用約束的時候,保留索引,可以使用如下腳本(當然你再啟用約束的時候會重新重建索引,這對大表顯然開銷相當大)
ALTER TABLE DM.EMP
DISABLE CONSTRAINT UK_EMP_COMM KEEP INDEX;
啟用約束
如果關閉主鍵約束時使用了CASCADE,此時使用ENABLE不會將主鍵約束與外鍵約束同時打開,只能對主鍵約束與外鍵約束分別使用ENABLE CONSTRAINT 子句打開。
推遲約束
Deferring Constraint Checks
當前事務的Constraint Checks全部推遲
SET CONSTRAINTS ALL DEFERRED;
SET CONSTRAINT XXX DEFERRED;
當前會話的Constraint Checks.
ALTER SSSSION SET CONSTRAINTS ALL deferred;
ALTER SSSSION SET CONSTRAINT xxx deferred;
約束信息
復制代碼
SELECT * FROM DBA_CONSTRAINTS;
SELECT * FROM ALL_CONSTRAINTS;
SELECT * FROM USER_CONSTRAINTS;
SELECT * FROM DBA_CONS_COLUMNS;
SELECT * FROM ALL_CONS_COLUMNS;
SELECT * FROM USER_CONS_COLUMNS;
復制代碼
約束有四種狀態:ENABLE、VALID、INVALID、DISABLE
約束的檢查機制
IMMEDIATE語句級:Oracle performs its constraint checking after the statement has been completely executed.
DEFERRED(事務級):A constraint is deferred if the system checks that it is satisfied only on commit. If a deferred constraint is violated, then commit causes the transaction to rollback;(推遲到事務提交時才檢查約束,謹慎使用)

㈤ 什麼是資料庫約束

資料庫約束是對表中的數據進行進一步的限制,保證數據的正確性、有效性和完整性。

約束通常與一個表相關聯,並使用CREATE CONSTRAINT或CREATE ASSERTIONSQL語句創建。

所有的關系資料庫都支持對數據表使用約束,通過約束可以更好地保證數據表裡數據的完整性。
是表上強制執行的校驗規則,除此之外,當表中數據存在相互依賴性時,可以保護相關數據不被刪除。約束通常無法修改。

(5)oracle資料庫約束擴展閱讀

資料庫中的五大約束:

1、主關鍵字約束

主關鍵字約束指定表的一列或幾列的組合的值在表中具有惟一性,即能惟一地指定一行記錄。每個表中只能有一列被指定為主關鍵字,且IMAGE 和TEXT 類型的列不能被指定為主關鍵字,也不允許指定主關鍵字列有NULL 屬性。

2、外關鍵字約束

外關鍵字約束定義了表之間的關系。當一個表中的一個列或多個列的組合和其它表中的主關鍵字定義相同時,就可以將這些列或列的組合定義為外關鍵字,並設定它適合哪個表中哪些列相關聯。

3、唯一性約束

惟一性約束指定一個或多個列的組合的值具有唯一性,以防止在列中輸入重復的值。唯一性約束指定的列可以有NULL 屬性。由於主關鍵字值是具有唯一性的,因此主關鍵字列不能再設定唯一性約束。唯一性約束最多由16 個列組成。

4、檢查約束

檢查約束對輸入列或整個表中的值設置檢查條件,以限制輸入值,保證資料庫的數據完整性。可以對每個列設置復合檢查。

5、預設約束

預設約束通過定義列的預設值或使用資料庫的預設值對象綁定表的列,來指定列的預設值。SQL Server 推薦使用預設約束,而不使用定義預設值的方式來指定列的預設值。

㈥ oracle資料庫建了唯一約束為什麼表中的數據還有重復的

可以是讓oracle 忽略就存在表內的重復值,並且新插入的數據遵守唯一約束.
操作步驟
1.檢查當前oracle 唯一約束創建的索引的unique的列的值. 必須是not unique.
2.如果是unique這要刪除該約束重新建,新建的約束先disable,並且要deferred
3.這時候檢查oracle 唯一約束創建的索引的unique的列的值你會發現該索引時not unique
4.接下來你就可以enable 該約束了
明天天帖出示例,現在沒時間

㈦ oracle資料庫 如何查詢某個表的約束條件

我們可以使用下面語句從all_constraints視圖中查看某表上的約束:
SELECT
constraint_name,
table_name,
r_owner,
r_constraint_name
FROM
all_constraints
WHERE
table_name
=
'table_name'
and
owner
=
'owner_name';
另一個視圖ALL_CONS_COLUMNS也包括組成表上約束列的信息。

㈧ oracle資料庫中的約束有哪些

外鍵是關系資料庫三個完整性的五個約束條件之一,是表與表之間建立的一種關系。

熱點內容
忘記密碼如何強制刷機vivo 發布:2024-04-27 11:28:40 瀏覽:384
c語言讀取指定行 發布:2024-04-27 11:28:30 瀏覽:51
c語言中a10什麼意思 發布:2024-04-27 10:45:43 瀏覽:58
物聯網中ftp是什麼意思 發布:2024-04-27 10:41:17 瀏覽:986
銀行密碼保護在哪裡 發布:2024-04-27 10:25:23 瀏覽:189
tomcat源碼導入eclipse 發布:2024-04-27 10:25:15 瀏覽:194
android的api 發布:2024-04-27 10:23:39 瀏覽:683
官式訪問 發布:2024-04-27 10:04:00 瀏覽:522
國產高配置有哪些 發布:2024-04-27 09:18:26 瀏覽:948
建行手機app忘記密碼如何修改 發布:2024-04-27 08:58:59 瀏覽:393