oracle_約束constraint,oracleconstraint

來源:互聯網
上載者:User

oracle_約束constraint,oracleconstraint


oracle_約束constraint

①什麼是約束
1約束是表級的強制規定
    有以下五種約束:
        NOT NULL
        UNIQUE
        PRIMARY KEY
        FOREIGN KEY
        CHECK
注意事項
如果不指定約束名 ,Oracle server 自動按照 SYS_Cn 的格式指定約束名
建立和修改約束:建表的同時\建表之後
可以在表級或列級定義約束
可以通過資料字典視圖查看約束

2.表級約束和資料行層級條件約束
作用範圍:
 ①資料行層級條件約束只能作用在一個列上
 ②表級約束可以作用在多個列上(當然表級約束也可以作用在一個列上)
定義方式:列約束必須跟在列的定義後面,資料表條件約束不與列一起,而是單獨定義。
註:非空(not null) 約束只能定義在列上

3.CREATE TABLE [schema.]table
 (column datatype [DEFAULT expr] [column_constraint],
  ...
  [table_constraint][,...]
  );

  列級
  column [CONSTRAINT constraint_name] constraint_type,
  表級
  column,...
  [CONSTRAINT constraint_name] constraint_type
  (column, ...),

② NOT NULL 約束
 保證列值不可為空:
 只能定義在列級:

③UNIQUE 約束
 唯一約束,允許出現多個空值:NULL。
 可以定義在表級或列級:
 CREATE TABLE employees(
    --資料行層級條件約束
    employee_id      NUMBER(6),
    last_name        VARCHAR2(25) UNIQUE,
    email            VARCHAR2(25),
    salary           NUMBER(8,2),
    commission_pct   NUMBER(2,2),
    hire_date        DATE NOT NULL,
    ... 
    --表級約束
    CONSTRAINT emp_email_uk UNIQUE(email));

④PRIMARY KEY 約束
  主鍵約束:非空且唯一
  可以定義在表級或列級:
 CREATE TABLE   departments(
    department_id        NUMBER(4),
    department_name      VARCHAR2(30)
      CONSTRAINT dept_name_nn NOT NULL,
    manager_id           NUMBER(6),
    location_id          NUMBER(4),
      CONSTRAINT dept_id_pk PRIMARY KEY(department_id));
 
⑤FOREIGN KEY 約束
 CREATE TABLE employees(
    employee_id      NUMBER(6),
    last_name        VARCHAR2(25) NOT NULL,
    email            VARCHAR2(25),
    salary           NUMBER(8,2),
    commission_pct   NUMBER(2,2),
    hire_date        DATE NOT NULL,
...
    department_id    NUMBER(4),
    CONSTRAINT emp_dept_fk FOREIGN KEY (department_id)
      REFERENCES departments(department_id),
    CONSTRAINT emp_email_uk UNIQUE(email));

FOREIGN KEY: 在表級指定子表中的列
REFERENCES: 標示在父表中的列
ON DELETE CASCADE(串聯刪除): 當父表中的列被刪除時,子表中相對應的列也被刪除
ON DELETE SET NULL(級聯置空): 子表中相應的列置空

⑥CHECK 條件約束
 定義每一行必須滿足的條件
..., salary NUMBER(2)
     CONSTRAINT emp_salary_min 
            CHECK (salary > 0),...
⑦添加約束的文法
  使用 ALTER TABLE 語句:
  添加或刪除約束,但是不能修改約束
  有效化或無效化約束
  只有添加 NOT NULL 約束要使用 MODIFY 語句
  ALTER TABLE  table
  ADD [CONSTRAINT constraint] type (column);

⑧刪除約束
ALTER TABLE   employees
DROP CONSTRAINT  emp_manager_fk;

⑨無效化約束
在ALTER TABLE 語句中使用 DISABLE 子句將約束無效化。
ALTER TABLE  employees
DISABLE CONSTRAINT emp_emp_id_pk;

啟用約束
ENABLE 子句可將當前無效的約束啟用
ALTER TABLE  employees
ENABLE CONSTRAINT emp_emp_id_pk;

註:當定義或啟用UNIQUE 或 PRIMARY KEY 約束時系統會自動建立UNIQUE 或 PRIMARY KEY索引

查詢約束
查詢資料字典視圖 USER_CONSTRAINTS
SELECT constraint_name, constraint_type,
 search_condition
FROM user_constraints
WHERE table_name = 'EMPLOYEES';

查詢定義約束的列
查詢資料字典視圖 USER_CONS_COLUMNS
SELECT constraint_name, column_name
FROM user_cons_columns
WHERE table_name = 'EMPLOYEES';


oracle 查看約束

select constraint_name from dba_constraints where owner=... and table_name=...
... 必需是大寫的用單引號引起來的表的屬主和表名
 
oracle裡面的一個關鍵字

constraint:約束條件
在Oracle中有幾種constraint用來約束table確保其資料的完整性,例如:
Check Constraint,Not Null Constraint, Primary Key Constraint,References Constraint。
舉例:CREATE TABLE STUDENT (
STUDENT _ID NUMBER(3) CONSTRAINT S_ID CHECK (STUDENT _ID > 0),註:檢查ID大於零。
STUDENT _NAME CHAR(30) CONSTRAINT S_NAME NOT NULL, 註:Name不可為空
MARKS_COUNT NUMBER(6), CONSTRAINT STUDENT _PRIME PRIMARY KEY (STUDENT _ID)註:ID為主鍵)
 

相關文章

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.