• 【SQL】定义约束


    数据库常见的约束类型及使用

    非空约束 NOT NULL

    创建表时定义

    create table dept80(id number,name varchar2(20) not null,salary number constraint dept80_not not null);
    

    在数据类型后面添加constraint 进行约束命名,不添加的话服务器会自动为你添加

    修改表时定义

    alter tabke dept80 add(location_id number);
    alter table dept80 modify location_id not null;
    

    唯一约束 UNIQUE

    指定列的值或列的组合值,使得表中的行必须是唯一的

    创建表时定义

    create table dept90(id number unique,name varchar2(20));
    

    修改表时定义

    alter table dept90 modify number name unique;
    

    主键约束 PRIMARY KEY

    表中的数据不能是空也必须是唯一的

    创建表时定义

    create table dept70(id number primary key);
    

    修改表时定义

    alter table dept90 modify(id primary key);
    

    创建联合主键

    create table dept50(id number,name varchar2(20),primary key(id,name);
    

    需要注意,不能直接在列后面添加,需要将联合主键写在primary key ()内

    外键约束

    在一个表和另一个表之间建立强制外键关系,预防破坏表之间连接的行为。约束也能防止非法数据插入外键列,因为它必须是指向的那个表的值之一。

    创建表时定义

    create table dept40(id number,d_id number ,foreign key(d_id) references dept60(id))
    

    只考虑外键,代码以d_id 为外键(foreign) 参照(references)dept60(id) ;需要注意创建表时定义,不能爱列后面直接添加(在,后定义外键,参照表要提前存在)

    修改表时定义

    alter table dept50 add foreign(d_id) references dept_60(id);
    

    用户自定义约束条件 CHECK

    指定一个必须为真的条件,满足条件填入

    创建表时

    create table dept30(id number,salary number(8,2) check(salary>1000));
    

    修改表时

    alter table dept50 add check(salary>1000);
    

    约束类型使用原则:

    • 创建表和修改表时,可以给约束起名时constraint 名称,但约束名称要唯一,若未起名,oracle会默认生成

    • 使用联合主键和外键约束时,不能直接在定义的数据类型后面直接添加,需单独在后面添加

    查询与禁用约束

    查询约束

    select constraint_name,constraint_type,search_condition from user_constraints where table_name = 'DEPT40'
    

    表名都是大写,search_condition 查询是否有check条件

    禁用约束 DISABLE

    alter table dept60 disable constraint dept60_pk cascade;
    

    截屏2020-08-18 上午11.02.02

    禁用的时候若存在主键有其他表的外键参考,则需要同时禁用,外键约束也需要禁用,使用casecade,否则报错

    启用约束 ENABLE

    alter table dept40 enable constraint dept40_fk;
    

    禁用和启用需要使用constraint 约束名

    悲观者正确,乐观者成功
  • 相关阅读:
    自用类库整理之SqlHelper和MySqlHelper
    如何设置root登录(滴滴云)
    linux下载命令wget
    linux下查看已经安装的jdk 并卸载jdk
    Angular之constructor和ngOnInit差异及适用场景(转)
    【Spring Boot-技巧】API返回值去除为NULL的字段
    jackson 实体转json 为NULL或者为空不参加序列化
    Android 将Android项目打包成aar文件
    Linux修改war包中文件
    Android 7.0 Gallery图库源码分析4
  • 原文地址:https://www.cnblogs.com/freebule/p/13522332.html
Copyright © 2020-2023  润新知