zoukankan      html  css  js  c++  java
  • Oracle——约束

    NOT NULL
    UNIQUE
    PRIMARY KEY
    FOREIGN KEY
    CHECK

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

    --指定约束名
    CREATE TABLE employees(
    employee_id NUMBER(6),
    first_name VARCHAR2(20), 
    job_id VARCHAR2(10) NOT NULL,
    CONSTRAINT emp_emp_id_pk PRIMARY KEY (EMPLOYEE_ID));
    • 非空(not null) 约束只能定义在列上
    • 唯一约束,允许出现多个空值:NULL。
    • primary key主键约束,既不能为空也不能重复。

    一、外键约束

    主表:在数据库中存在主键用于与其他表相关联
    从表:以主表的主键作为外键的表。

    create table employees(
    --列级约束
    id number(10),
    name varchar2(20) constraint emp_name_nn not null,
    email varchar2(20),
    salary number(10,2) constraint emp_salary_min check (salary > 1500),
    department_id number(10),
    --表级约束
    constraint emp_email_uk unique(email),
    constraint emp_id_pk primary key(id),
    constraint emp_dept_id_fk foreign key(department_id) 
    references departments(department_id ) ON DELETE CASCADE
    )
    • FOREIGN KEY: 指定从表中的列
    • REFERENCES: 标示主表中的列
    • ON DELETE CASCADE(级联删除): 当主表中的列被删除时,从表中相对应的列也被删除
    • ON DELETE SET NULL(级联置空): 从表中相应的列置空

    CHECK 约束

    salary NUMBER(2) CONSTRAINT emp_salary_min CHECK (salary > 0)

    二、添加和修改约束

    • 添加 NOT NULL 约束要使用 MODIFY 语句
    Alter table emp modify(empname varchar2(50) not null);
    • 添加其他约束用ADD语句
    ALTER TABLE employees
    ADD CONSTRAINT emp_email_pk primary(employee_id)
    • 删除约束
    ALTER TABLE employees DROP CONSTRAINT emp_email_uk;

    三、查看约束

    • 查询数据字典视图 USER_CONSTRAINTS
    SELECT    constraint_name, constraint_type, search_condition
    FROM    user_constraints
    WHERE    table_name = 'EMPLOYEES';
    CONSTRAINT_NAME             CONSTRAINT_TYPE              SEARCH_CONDITION
    --------------            ------------------------     --------------------    
    EMP_DEPT_FK                           R               
    EMP_JOB_FK                            R               
    EMP_MANAGER_FK                        R               
    EMP_LAST_NAME_NN                      C               "LAST_NAME" IS NOT NULL
    EMP_EMAIL_NN                          C               "EMAIL" IS NOT NULL
    EMP_HIRE_DATE_NN                      C               "HIRE_DATE" IS NOT NULL
    EMP_JOB_NN                            C               "JOB_ID" IS NOT NULL
    EMP_SALARY_MIN                        C               salary > 0
    EMP_EMAIL_UK                          U               
    EMP_EMP_ID_PK                         P            
    • 查询定义约束的列,查询数据字典视图 USER_CONS_COLUMNS
    SELECT    constraint_name, column_name
    FROM    user_cons_columns
    WHERE    table_name = 'EMPLOYEES';
    CONSTRAINT_NAME                           COLUMN_NAME
    ---------------------               ---------------------
    EMP_LAST_NAME_NN                          LAST_NAME
    EMP_EMAIL_NN                              EMAIL
    EMP_HIRE_DATE_NN                          HIRE_DATE
    EMP_JOB_NN                                JOB_ID
    EMP_SALARY_MIN                            SALARY
    EMP_EMAIL_UK                              EMAIL
    EMP_EMP_ID_PK                             EMPLOYEE_ID
    EMP_DEPT_FK                               DEPARTMENT_ID
    EMP_JOB_FK                                JOB_ID
    EMP_MANAGER_FK                            MANAGER_ID
  • 相关阅读:
    POJ 3672 水题......
    POJ 3279 枚举?
    STL
    241. Different Ways to Add Parentheses
    282. Expression Add Operators
    169. Majority Element
    Weekly Contest 121
    927. Three Equal Parts
    910. Smallest Range II
    921. Minimum Add to Make Parentheses Valid
  • 原文地址:https://www.cnblogs.com/realshijing/p/8414810.html
Copyright © 2011-2022 走看看