91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Oracle 約束

發布時間:2020-06-29 14:18:31 來源:網絡 閱讀:993 作者:oracle夢想 欄目:關系型數據庫

一、約束的概念

通俗來講,約束是為了使被填入的數據更加符合業務規范、保證數據完整性而開發設計的手段。

如果進行的DML(更新、插入、刪除行)或DDL(此處指ALTER更改操作)操作不合符業務規范(約束)要求,則數據庫會拒絕請求;

約束既可以是表級約束也可以是列級約束,需要強調的是notnull 一定是列級的。

在定義約束的時候,正常應該按照語法格式和命名規則進行定義,如若沒有給出約束的名稱,則Oracle會給約束按照SYS_Cn(n為自然數,由Oracle根據流水生成),如SYS_C001684,推薦大家還是養成良好的學習習慣,正確命名約束;

二、Oracle約束分類

非空(NOT NULL)約束、 唯一(UNIQUE)約束、主鍵(PRIMARY KEY)約束、外鍵(FOREIGN KEY)約束、條件(CHECK)約束、REF約束。

三、Oracle約束關系比照圖

約束名

中文含義

約束

類型

命名規范

特征

備注說明

NOT NULL

非空約束

C

NN_表名_列名

不允許空值

只能定義在列上

UNIQUE

唯一值約束

U

UK_表名_列名

值不允許重復,但是可以為NULL并且NULL可以有多個,因為NULL<>NULL,組合列個數不能超過32個。

需要定義UNIQUE的列不能是主鍵列,即一個列不能既有主鍵約束又有UNIQUE約束

PRIMARY KEY

主鍵約束

P

PK_表名

值不能重復并且不能為NULL,組合列個數不能超過32個。

一個表或視圖只能有一個主鍵

FOREIGN KEY

外鍵約束

R

FK_表名_列名

存的父表主鍵的值,與父表存在依賴關系,插入新值時,如果外鍵的值在父表中沒有則無法插入;

外鍵是把雙刃劍,在增加子父表關系驗證的同時,犧牲了oracle數據性能,現在大型數據設計中會避免使用外鍵。

CHECK

條件約束

C

CK_表名_列名

自定義的約束檢查,按照開發設計者的要求進行定義,比如要求檢查輸入值的符合某個范圍,比如年齡列需要大于等于1歲小于鄧宇120  CHECK(AGE BETWEEN 1 AND  120)

約束條件定義靈活

 

四、約束查看

1、  DBA_CONSTRAINTS:數據庫中所有的約束定義

2、  ALL_CONSTRAINTS:用戶有權限查看的表的約束;

3、  USER_CONSTRAINTS:屬于當前登陸用戶創建的約束;

約束視圖中關鍵字段說明

OWNER:約束創建人

CONSTRAINT_NAME:約束的名字

CONSTRAINT_TYPE:約束的類型,參照上圖

SEARCH_CONDITION:可以通過點擊大文本進行查閱約束具體內容

STATUS:約束當前的狀態,是否有效

五、約束創建

1、  約束正常情況下應當在表設計、創建時定義完整,如若使用中發現需要定義某種約束,這需要首先處理不符合規范要求的數據然后再行定義約束并且時間越早越好。

2、  下面我們會使用CREATETABLE 時創建約束,包括NOT NULLPRIMARY KEYFOREIGN KEYUNIQUE以及CHECK約束。

SQL>CREATETABLEconstraint_test (

                                                    cno VARCHAR2(4) PRIMARYKEY,

                                                               cname VARCHAR2(40) UNIQUE,

                                                               cdate  DATE                     DEFAULTTO_DATE(TO_CHAR(SYSDATE,'YYYY-MM-DD'),'YYYY-MM-DD')    NOTNULL)

3、  下面是使用ALTER 方式進行后續追加約束的方式

--增加一列備注(note)列,并且要求使用CHECK約束檢查只能輸入字母的字符串

SQL>ALTERTABLE constraint_test ADD note VARCHAR2(100);

SQL>ALTERTABLE constraint_test ADD CONSTRAINT ck_constraint_test_note 

CHECK(REPLACE(TRANSLATE(UPPER(note),'ABCDEFGHIJKLMNOPQRSTUVWXYZ','A'),'')  IS NOT NULL);

六、約束刪除
1、語法格式:ALTERTABLE【表名】 DROPCONSTRAINT【約束名】;

2、舉例:ALTERTABLE constraint_test DROPCONSTRAINTck_constraint_test_note;

 

七、約束重命名

1、  語法格式:

ALTERTABLE【表名】RENAME CONSTRAINT【舊約束名】TO【舊約束名】;

2、舉例:ALTERTABLE constraint_test RENAMECONSTRAINTnn_constraint_test_note TO ck_constraint_test_note;

八、禁用約束

1、  語法格式:

ALTERTABLE【表名】DISABLECONSTRAINT【約束名】CASCADE;

2、  舉例:

ALTERTABLE constraint_test DISABLECONSTRAINTck_constraint_test_note [CASCADE];

3、  說明1cascade是一個可選選項,例如父表中的主鍵是子表的外鍵,如果我們想禁用父表中的主鍵約束效果同時也禁用字表的外鍵約束,此時就可以啟用CASCADE 這個參數;

4、  說明2:如果禁用約束會被Oracle自動創建索引(如主鍵、外鍵、unique等),在禁用該約束的同時也會刪除該約束對應的索引,這顯然對于大數據表來說使我們不想看見的,所以我可以在禁用約束的時候選擇保留索引,方法是:

ALTERTABLE【表名】DISABLECONSTRAINT【約束名】INDEX;

九、啟用約束

1、  語法格式:

ALTERTABLE【表名】ENABLECONSTRAINT【約束名】INDEX;

2、  說明:我們在禁用主鍵和外鍵的時候,可以通過禁用父表的主鍵后加cascade的方式進行偷懶,但是如果重新啟用,則需要單獨一一啟用;

十、        約束狀態

ENABLE(可用)、VALID(有效)、INVALID(無效)、DISABLE(禁用)

十一、  關于使用約束的建議

1、應該在創建表的時候就定義好所需的各種Oracle約束。如果沒有的話,應盡可能早地加上所需要的Oracle約束,這樣會使系統更可靠,更容易維護;(這個視具體情況而言)

2、  Oracle系統進行過多的約束檢查會大大的降低Oracle數據庫系統的效

十二、  十二、約束章節其他

1、  不能在視圖上指定字段為NULL或者 NOT NULL

2、  使用主鍵、外鍵的報表在刪除的時候,必須依照先刪除字表后刪除父表順序進行操作,或者在父表刪除語句后加cascade關鍵字,推薦一步步操作;

 


向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

涞水县| 马尔康县| 绩溪县| 塔城市| 家居| 综艺| 大余县| 英山县| 乡城县| 徐闻县| 南靖县| 青龙| 分宜县| 安平县| 资讯| 玛多县| 桦甸市| 临高县| 平潭县| 龙川县| 巴塘县| 托里县| 通渭县| 甘泉县| 伊宁县| 达孜县| 丽水市| 沈丘县| 安仁县| 平邑县| 根河市| 南宫市| 彝良县| 天水市| 南郑县| 长葛市| 昌黎县| 普格县| 东至县| 万宁市| 奇台县|