日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時間:8:30-17:00
你可能遇到了下面的問題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
Oracle約束

導(dǎo)讀:什么是約束?約束是表級強制執(zhí)行的規(guī)則,當(dāng)表中數(shù)據(jù)有相互依賴性時,可保護數(shù)據(jù)不被刪除。Oracle數(shù)據(jù)庫是一種功能性很強大的數(shù)據(jù)庫系統(tǒng),Oracle數(shù)據(jù)庫中的數(shù)據(jù)是絕對要保密的,下文中就為大家介紹Oracle數(shù)據(jù)庫的約束問題。

成都創(chuàng)新互聯(lián)公司長期為近1000家客戶提供的網(wǎng)站建設(shè)服務(wù),團隊從業(yè)經(jīng)驗10年,關(guān)注不同地域、不同群體,并針對不同對象提供差異化的產(chǎn)品和服務(wù);打造開放共贏平臺,與合作伙伴共同營造健康的互聯(lián)網(wǎng)生態(tài)環(huán)境。為固陽企業(yè)提供專業(yè)的成都做網(wǎng)站、網(wǎng)站制作,固陽網(wǎng)站改版等技術(shù)服務(wù)。擁有十年豐富建站經(jīng)驗和眾多成功案例,為您定制開發(fā)。

Oracle 有如下類型的約束:

NOT NULL
  UNIQUE Key
  PRIMARY KEY
  FOREIGN KEY
  CHECK

Oracle使用SYS_Cn格式命名約束.

  創(chuàng)建約束:

  在建表的同時創(chuàng)建

  建表后創(chuàng)建

  可定義列級或表級約束.

  可通過數(shù)據(jù)字典表查看約束.

  建表時創(chuàng)建約束

create table OTL_NICOTINE_GRADE ( ID NUMBER not null, SEASON_NO NUMBER(4) not null, RECEIPT_NO NUMBER(8) not null,
  GRADE VARCHAR2(10) not null, PROPORTION NUMBER(5,2) not null, WEIGHT NUMBER(10,2) not null, VALUE NUMBER(12,2) not
  null, constraint PK_OTL_NICOTINE_GRADE primary key (ID, GRADE), constraint FK_OTL_NICO_REFERENCE_OTL_CHEC foreign
  key (ID) references OTL_CHECK_CHEM (ID) )

  建表后添加約束

 ALTER TABLE (table_name) ADD ( CONSTRAINT (foreign key constraint name) FOREIGN KEY (field name ) REFERENCES
  primary_table_name ( primary_table_primary_index_field )
  SQL> create table emplyees(
  2 employee_id number(6),
  3 last_name varchar2(25) not null,
  4 salary number(8,2),
  5 commission_pct number(2,2),
  6 hire_date date,
  7 constraint emp_hire_date_1 not null,
  8 CONSTRAINT dept_dname_uk UNIQUE(emp_name)
  9 );
  表已創(chuàng)建。
  SQL>
  1 select constraint_name,table_name
  2 from dba_constraints
  3 where table_name='EMPLYEES'
  CONSTRAINT_NAME TABLE_NAME
  ------------------------------ ------------------------------
  SYS_C003012 EMPLYEES
  EMP_HIRE_DATE_1 EMPLYEES

定義主鍵約束PRIMARY KEY

 SQL> CREATE TABLE dept(
  2 deptno NUMBER(2),
  3 dname VARCHAR2(14),
  4 loc VARCHAR2(13),
  5 CONSTRAINT dept_dname_uk UNIQUE(dname),
  6 CONSTRAINT dept_deptno_pk PRIMARY KEY(deptno));

外鍵約束FOREIGN KEY

SQL> CREATE TABLE emp(
  2 empno NUMBER(4),
  3 ename VARCHAR2(10) NOT NULL,
  4 job VARCHAR2(9),
  5 mgr NUMBER(4),
  6 hiredate DATE,
  7 sal NUMBER(7,2),
  8 comm NUMBER(7,2),
  9 deptno NUMBER(7,2) NOT NULL,
  10 CONSTRAINT emp_deptno_fk FOREIGN KEY (deptno)
  11 REFERENCES dept (deptno));

外鍵約束的關(guān)鍵字

  FOREIGN KEY

  定義子表的哪一列作為外鍵約束

  REFERENCES

  指示主表和參照的列

  ON DELETE CASCADE

  刪除主表記錄時將子表相關(guān)記錄刪除

#p#

  ON DELETE SET NULL

  將外鍵引用置為空值

  CHECK 約束

  定義每一記錄都要滿足的條件

  條件表達式不允許有:

  CURRVAL, NEXTVAL, LEVEL, ROWNUM

 SYSDATE, UID, USER, USERENV 函數(shù)

  參照其他記錄的值

  ..., deptno NUMBER(2),

  CONSTRAINT emp_deptno_ck

  CHECK (DEPTNO BETWEEN 10 AND 99),...

  加約束

  ALTER TABLE table

  ADD [CONSTRAINT constraint] type (column);

  可加或刪除約束,但不能修改

  可使約束生效和失效

  使用MODIFY子句可加 NOT NULL約束

  加 FOREIGN KEY 約束到EMP表

 SQL> ALTER TABLE emp
  2 ADD CONSTRAINT emp_mgr_fk
  3 FOREIGN KEY(mgr) REFERENCES emp(empno);

刪除約束

  刪除約束emp_mgr_fk

SQL> ALTER TABLE emp
  2 DROP CONSTRAINT emp_mgr_fk;

刪除主鍵約束和相關(guān)的外鍵約束

SQL> ALTER TABLE dept
  2 DROP PRIMARY KEY CASCADE;

使約束失效

 在ALTER TABLE 語句中執(zhí)行DISABLE子句可使完整性約束失效

使用 CASCADE 選項可使依賴的完整約束失效

SQL> ALTER TABLE emp
2 DISABLE CONSTRAINT emp_empno_pk CASCADE;

使用ENABLE子句將失效的約束生效

SQL> ALTER TABLE emp
2 ENABLE CONSTRAINT emp_empno_pk;

當(dāng)使UNIQUE 或 PRIMARY KEY約束生效時,會自動創(chuàng)建 UNIQUE 或PRIMARY KEY 索引.

延遲約束驗證

ALTER TABLE AAA ADD (CONSTRAINT AAA_PK PRIMARY KEY(a) DEFERRABLE) ;
  ALTER TABLE BBB
  ADD (CONSTRAINT BBB_FK FOREIGN KEY(a)
  REFERENCES AAA(a)
  ON DELETE CASCADE DEFERRABLE)
  CREATE OR REPLACE TRIGGER ID_TRG AFTER UPDATE ON AAA FOR EACH ROW
  BEGIN
  UPDATE BBB SET a=:NEW.a WHERE a=:OLD.a;
  END;

查看約束

通過查看 USER_CONSTRAINTS 表可得到用戶的所有約束.

SQL> SELECT constraint_name, constraint_type,
2 sarch_condition
3 FROM user_constraints
4 WHERE table_name = 'EMP';
CONSTRAINT_NAME C SEARCH_CONDITION
SYS_C00674 C EMPNO IS NOT NULL
SYS_C00675 C DEPTNO IS NOT NULL

EMP_EMPNO_PK P
...

查看約束建立在哪些列

通過查詢USER_CONS_COLUMNS 視圖可獲得約束建立在哪些列上

 SQL> SELECT constraint_name, column_name
  2 FROM user_cons_columns
  3 WHERE table_name = 'EMP';
  CONSTRAINT_NAME COLUMN_NAME
  ------------------------- ----------------------
  EMP_DEPTNO_FK DEPTNO
  EMP_EMPNO_PK EMPNO
  EMP_MGR_FK MGR
  SYS_C00674 EMPNO
  SYS_C00675 DEPTNO
  ------------------------- ----------------------

constraint_type

約束的類型有如下幾種:

C (check constraint on a table)
  P (primary key)
  U (unique key)
  R (Referential AKA Foreign Key)
  V (with check option, on a view)
  O (with read only, on a view)

【編輯推薦】

  1. 如何調(diào)整Oracle性能
  2. Oracle學(xué)習(xí)入門心得
  3. Oracle數(shù)據(jù)庫中使用外部表的心得
  4. Oracle數(shù)據(jù)庫防火墻為數(shù)據(jù)庫部署第一道防線

新聞名稱:Oracle約束
文章URL:http://m.5511xx.com/article/cdoccgi.html