2020国产成人精品视频,性做久久久久久久久,亚洲国产成人久久综合一区,亚洲影院天堂中文av色

分享

數(shù)據(jù)庫(kù)的約束簡(jiǎn)介 - NetSQL - 博客園

 nbxming 2011-01-09

數(shù)據(jù)庫(kù)的約束簡(jiǎn)介

約束的簡(jiǎn)介

數(shù)據(jù)的完整性是指數(shù)據(jù)的正確性和一致性,可以通過(guò)定義表時(shí)定義完整性約束,也可以通過(guò)規(guī)則,索引,觸發(fā)器等。約束分為兩類(lèi):行級(jí)和表級(jí),處理機(jī)制是一樣的。行級(jí)約束放在列后,表級(jí)約束放在表后,多個(gè)列共用的約束放在表后。

完整性約束是一種規(guī)則,不占用任何數(shù)據(jù)庫(kù)空間。完整性約束存在數(shù)據(jù)字典中,在執(zhí)行SQL或PL/SQL期間使用。用戶(hù)可以指明約束是啟用的還是禁用的,當(dāng)約束啟用時(shí),他增強(qiáng)了數(shù)據(jù)的完整性,否則,則反之,但約束始終存在于數(shù)據(jù)字典中。

約束類(lèi)型

總的來(lái)說(shuō)有五種:唯一性和主鍵約束、外鍵約束、檢查約束、空值約束、默認(rèn)值約束,

有五大關(guān)鍵詞,UNIQUE和Primary Key, Foreign Key, CHECK, NOT NULL, DEFAULT

1。唯一性和主鍵約束。

要求某一列,或幾列不能有重復(fù)的值,建立主鍵約束和唯一約束時(shí),Oralce會(huì)基于約束列自動(dòng)建立唯一索引;主鍵約束不允許為NULL,唯一約束允許為NULL,一張表只能建立一個(gè)主鍵約束。唯一性和主鍵約束類(lèi)似,只是關(guān)鍵詞不同而已,語(yǔ)法一致。

創(chuàng)建約束

CREATE TABLE TABLE_NAME
(
    COL1 VARCHAR2(32) NOT NULL PRIMARY KEY,
)

CREATE TABLE TABLE_NAME
(
    COL1 VARCHAR2(32) NOT NULL CONSTRAINT PK_ID PRIMARY KEY,
)

CREATE TABLE TABLE_NAME
(
    COL1 VARCHAR2(32) NOT NULL,
    COL2 VARCHAR2(32) NOT NULL Foreign Key,
    CONSTRAINT PK_TABLE_NAME PRIMARY KEY(COL1,COL2)
)

修改約束

ALTER TABLE Table_Name
ADD CONSTRAINT PK_Table_Name PRIMARY KEY NONCLUSTERED(Col1)【這里表明了是聚集還是非聚集主鍵索引】

如果唯一性約束保護(hù)多個(gè)數(shù)據(jù)列,那么唯一性約束要作為表約束增加。語(yǔ)法如下:
CONSTRAINT CONSTRAINT_NAME (COL1,COL2) UNIQUE USING INDEX TABLESPACE (TABLESPACE_NAME) STORAGE (STORED CLAUSE)
 

 2。外鍵約束。

剩下的約束寫(xiě)法都是差不多,這里就不多舉例了。

CREATE TABLE TABLE_NAME
(
    COL1 VARCHAR2(32) NOT NULL REFERENCES PRIMARY_TABLE(PRIMARY_COL) ON DELETE CASCADE,
)

CREATE TABLE TABLE_NAME
(
    COL1 VARCHAR2(32) NOT NULL,
    CONSTRAINT FK_TABLE_NAME FOREIGN KEY REFERENCES PRIMARY_TABLE(PRIMARY_COL) ON DELETE SET NULL
)
 

這里需要注意的是ON 后面的內(nèi)容。這個(gè)是關(guān)聯(lián)的關(guān)鍵。與刪除修改密切相關(guān)。

  • NO ACTION:更新或刪除父表中的數(shù)據(jù)時(shí),如果會(huì)使子表中的外鍵違反引用完整性,該動(dòng)作將被禁止執(zhí)行。
  • CASCADE: 當(dāng)父表中被引用列的數(shù)據(jù)被更新或刪除時(shí),子表中的相應(yīng)的數(shù)據(jù)也被更新或刪除。
  • SET NULL:當(dāng)父表數(shù)據(jù)被更新或刪除時(shí),子表中的相應(yīng)數(shù)據(jù)被設(shè)置成NULL值,前提是子表中的相應(yīng)列允許NULL值。
  • SET DEFAULT:當(dāng)父表數(shù)據(jù)被更新或刪除時(shí),子表中的數(shù)據(jù)被設(shè)置成默認(rèn)值。前提是子表中的相應(yīng)列設(shè)置有默認(rèn)值。

3。檢查約束。

檢查列的類(lèi)型和范圍。語(yǔ)法:CONSTRAINT [constraint_name] CHECK (condition); 比如:check(Age >2)

 

4。空值約束、5。默認(rèn)約束

還有兩種方式,一種是默認(rèn)值(default sysdate或者 default 1),

一種是限制空值Not Null【NOT NULL只能在列級(jí)定義】,

這也可以看成是約束,它的作用也是進(jìn)行數(shù)據(jù)的完整性控制。

修改默認(rèn)約束:

ALTER TABLE TABLENAME
ADD CONSTRAINT DF_TABLENAME_COL1 DEFAUIT('22') FOR COL1

 
修改空值約束

修改NOT NULL是四個(gè)約束當(dāng)中最特殊的,直接用Modify Col_Name NOT NULL 即可

 

刪除、禁用、啟用約束、修改約束名

ALTER TABLE table_name

DROP CONSTRAINT constraint_name(刪除約束)

DISABLE CONSTRAINT constraint_name;(啟用約束)

ENABLE CONSTRAINT constraint_name;(禁用約束)ALTER TABLE table_name

RENAME CONSTRAINT old_constraint_name TO new_constraint_name(修改約束名)

select 'alter table '||table_name||' disable constraint '||constraint_name||';' from user_constraints where constraint_type='R';【禁用所有外鍵約束】

select 'alter table '||table_name||' enable constraint '||constraint_name||';' from user_constraints where constraint_type='R';【啟用所有外鍵約束】

select 'alter table '||table_name||' drop constraint '||constraint_name||';' from user_constraints where constraint_type='R';【刪除所有外鍵約束 】

所有約束信息:SELECT * FROM user_constraints

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶(hù)發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買(mǎi)等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶(hù) 評(píng)論公約

    類(lèi)似文章 更多