oracle创建表与表的约束

 

Constraint 约束
如不给约束指定起名,那么oracle会自动给约束起名

表级约束和列级约束

  • 作用范围

    ①列级约束只能作用在一个列上

    ②表级约束可以作用在多个列上(当然表级约束也可以作用在一个列上)

  • 定义方式:列约束必须跟在列的定义后面,表约束不与列一起,而是单独定义。
  • 非空(not null) 约束只能定义在列上

NOT NULL 非空约束

只能定义在列级:

CREATE TABLE test(

    employee_id    NUMBER(6),

    last_name      VARCHAR2(25) NOT NULL,

hire_date      DATE CONSTRAINT test_last_name NOT NULL

                   )

UNIQUE 数据唯一约束

注意:唯一约束,允许出现多个空值:NULL。

可以定义在表级或列级:

(注意看清楚逗号的分隔)

CREATE TABLE test(

    employee_id      NUMBER(6),

    last_name        VARCHAR2(25) UNIQUE,

    email            VARCHAR2(25),

    hire_date        DATE NOT NULL,

CONSTRAINT test_email_uk UNIQUE(email)

);

PRIMARY KEY 主键约束

可以定义在表级或列级:

(1)数据不能为空

(2)数据要唯一

CREATE TABLE test(

    employee_id      NUMBER(6) PRIMARY KEY,

    last_name        VARCHAR2(25) UNIQUE,

    email            VARCHAR2(25),

    salary           NUMBER(8,2),

    commission_pct   NUMBER(2,2),

    hire_date        DATE NOT NULL,

    CONSTRAINT test_email_uk UNIQUE(email));

--又或者CONSTRAINT test_id_pk PRIMARY KEY(department_id)

FOREIGN KEY 外键约束

可以定义在表级或列级:

CREATE TABLE test(

    employee_id      NUMBER(6) PRIMARY KEY,

    last_name        VARCHAR2(25) UNIQUE,

    email            VARCHAR2(25),

    salary           NUMBER(8,2),

    department_id    NUMBER(4) ,

    hire_date        DATE NOT NULL,   

    CONSTRAINT test_fk FOREIGN KEY (department_id)

REFERENCES departments(department_id),

    CONSTRAINT test_email_uk UNIQUE(email));

 

FOREIGN KEY 约束的关键字

  • FOREIGN KEY: 在表级指定子表中的列
    • REFERENCES: 标示在父表中的列
    • ON DELETE CASCADE(级联删除): 当父表中的列被删除时,子表中相对应的列也被删除
    • ON DELETE SET NULL(级联置空): 子表中相应的列置空

ON DELETE CASCADE

如果删除departments表的主键department_id,那么作为test表外键department_id所在的列的数据一起删除

ON DELETE SET NULL

如果删除departments表的主键department_id,那么作为test表外键department_id所在的位置为空

CREATE TABLE test(

    employee_id      NUMBER(6) PRIMARY KEY,

    last_name        VARCHAR2(25) UNIQUE,

    email            VARCHAR2(25),

    salary           NUMBER(8,2),

    department_id    NUMBER(4) ,

    hire_date        DATE NOT NULL,   

    CONSTRAINT test_fk FOREIGN KEY (department_id)

REFERENCES departments(department_id) ON DELETE CASCADE    CONSTRAINT test_email_uk UNIQUE(email));

 

 

CHECK 检查每行约束

  • 定义每一行必须满足的条件

CREATE TABLE test(

    employee_id      NUMBER(6) PRIMARY KEY,

    last_name        VARCHAR2(25) UNIQUE,

    email            VARCHAR2(25),

    salary           NUMBER(8,2),

    CONSTRAINT test_salary_min  CHECK (salary > 0)

    );

   

添加约束的语法

使用 ALTER TABLE 语句:

  • 添加或删除约束,但是不能修改约束
  • 有效化或无效化约束
  • 添加 NOT NULL 约束要使用 MODIFY 语句

ALTER TABLE table

 ADD [CONSTRAINT constraint] type (column);

 

 

ADD CONSTRAINT   添加约束

ALTER TABLE     employees

ADD CONSTRAINT  emp_manager_fk

  FOREIGN KEY(manager_id)

  REFERENCES employees(employee_id);

DROP CONSTRAINT  删除约束

ALTER TABLE      employees

DROP CONSTRAINT  emp_manager_fk;

DISABLE CONSTRAINT 无效化约束

ALTER TABLE    employees

DISABLE CONSTRAINT  emp_emp_id_pk;

 

ENABLE CONSTRAINT **约束

当定义或**UNIQUE 或 PRIMARY KEY 约束时系统会自动创建UNIQUE 或 PRIMARY KEY索引

 

ALTER TABLE     employees

ENABLE CONSTRAINT   emp_emp_id_pk;

USER_CONSTRAINTS 查询约束

SELECT  constraint_name, constraint_type,search_condition

FROM  user_constraints

WHERE  table_name = 'EMPLOYEES';

oracle创建表与表的约束

USER_CONS_COLUMNS 查询定义约束的列

SELECT  constraint_name, column_name

FROM    user_cons_columns

WHERE   table_name = 'EMPLOYEES';

如,

oracle创建表与表的约束

相关文章: