Oracle基礎筆記九

第九章 約束


1.什麼是約束

約束是表級的強制規定

有以下五種約束:NOT NULL UNIQUE PRIMARY KEY FOREIGN KEY CHECK


2.注意事項

如果不指定約束名 ,Oracle server 自動按照 SYS_Cn 的格式指定約束名

創建和修改約束:

建表的同時

建表之後

可以在表級或列級定義約束

可以通過數據字典視圖查看約束


3.表級約束和列級約束

作用範圍:

①列級約束只能作用在一個列上

②表級約束可以作用在多個列上(當然表級約束也   

        可以作用在一個列上)

定義方式:列約束必須跟在列的定義後面,表約束不與列一起,而是單獨定義。

非空(not null) 約束只能定義在列上


4.定義約束

4.1NOT NULL 約束    只能定義在列級:


CREATE TABLE employees(

    employee_id    NUMBER(6),

    last_name      VARCHAR2(25) NOT NULL,

    salary         NUMBER(8,2),

    commission_pct NUMBER(2,2),

    hire_date      DATE 

                   CONSTRAINT emp_hire_date_nn

                   NOT NULL,

...  


4.2UNIQUE 約束    唯一約束,允許出現多個空值: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));


4.3PRIMARY 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));


4.4FOREIGN 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 約束的關鍵字:

FOREIGN KEY: 在表級指定子表中的列

REFERENCES: 標示在父表中的列

ON DELETE CASCADE(級聯刪除): 當父表中的列被刪除時,子表中相對應的列也被刪除

ON DELETE SET NULL(級聯置空): 子表中相應的列置空


4.5CHECK 約束   定義每一行必須滿足的條件

..., salary NUMBER(2)

     CONSTRAINT emp_salary_min  

            CHECK (salary > 0),...



5.添加約束的語法

使用 ALTER TABLE 語句:

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

有效化或無效化約束

添加 NOT NULL 約束要使用 MODIFY 語句


以create table emp as select * from employees;爲例,添加和刪除約束

Alter table emp modify(empname varchar2(50) not null);


添加約束舉例

ALTER TABLE     employees

ADD CONSTRAINT  emp_manager_fk 

  FOREIGN KEY(manager_id) 

  REFERENCES employees(employee_id);

Table altered.


從表 EMPLOYEES 中刪除約束

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;







發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章