• 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
  • 相关阅读:
    成功率最高的发送邮件代码
    更改ReSharper的智能提示
    [转]SQL 2000 Insert返回自动编号id三种方法比较
    得到汉字的拼音首字母
    不能正确显示UltraWebGrid的解决方法.
    [转]asp.net使用json
    [转] 技术是一种加速器 但重要的不是技术
    [原]模仿Google首页的PNG动画效果
    一个通过DataSet操作XML的类
    C# partial 关键字详解
  • 原文地址:https://www.cnblogs.com/realshijing/p/8414810.html
Copyright © 2020-2023  润新知