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
  • 相关阅读:
    每天干的啥?(2017.7)
    每天干的啥?(2017.6)
    每天干的啥?(2017.5)
    每天干的啥?(2017.4)
    C# WinForm中如何让当前应用程序只允许启动一个实例
    C# WinForm 关闭登陆窗体后进程还再内存怎么办?
    ASP.NET在MVC控制器中获取Form表单值的方法
    C#封装CRUD到SqlHelper类解读
    windows 10微软账户不能访问局域网共享,但是本地账户可以访问
    C#高级参数params的使用
  • 原文地址:https://www.cnblogs.com/realshijing/p/8414810.html
Copyright © 2011-2022 走看看