zoukankan      html  css  js  c++  java
  • Oracle约束详解


    ①not null[非空]
    该列不能为null
    ②unique[唯一]
    用于指定某列的值,不能重复,但可以是null[可以是多个null,在SqlServer只能是一个null]
    ③primary key[主键]
    用于唯一标识表行的数据,该列不能重复且不能为null
    ④foreign key[外键]
    用于定义主表和从表之间的关系
    外键约束要定义在从表上
    主表则必须具有主键约束或是unique约束
    当定义外键约束后,要求外键列数据必须在主表的列存在或是null
    外键列和主键列的数据类型要一致

    ⑤check[检查]
    用于强制行数据必须满足的条件

    注意事项:
    1、primary key和unique区别:
    一个表可以有多个unique,但只能有一个主键
    每张表都应该有一个主键
    unique列的值可以为null,但主键不能
    primary key所在的列,会自动创建索引,但是unique不会自动创建索引
    2、注意[default]需在 字段名 和 约束 之间
    create table test(
    id number(4) primary key,
    sex char(2) default '男' check(sex in('男', '女'))
    );


    ===================
    约束修改
    ===================
    注意事项:
    增加not null约束时,需要使用modify选项
    而增加唉其它约束使用add选项

    ①not null--modify
    alter table goods modify goodsName not null;
    ②unique[增加唯一约束]
    alert table 表名 add constraint 约束名 unique(列名);
    ③check
    alter table 表名 add constraint 约束名 check( 列名 in('北京', '上海', '武汉'));
    ④primary key[主键约束]
    alter table 表名
    add constraint 约束名 primary key(主键);
    ⑤foreign key[外键约束]
    alter table 从表
    add constraint 约束名
    foreign key(关联字段) references 主表(关联字段);
    ⑥drop constraint[删除约束]
    alter table 表名 drop constraint 约束名称;
    ⑦drop constraint primary key[删除主键约束]
    alter table 表名 drop constraint primary key cascade;
    [cascade]-->级联删除

    ====================================================
    alter table 表名 add constraint 约束名 约束种类(字段)
    alter table 表名 modify 字段名 not null;
    ====================================================

    =====================
    列级定义和表级定义
    =====================
    列级定义:
    在定义表后,直接在列后定义约束,称之为列级定义
    create table test(id number primary key,--->列级定义
    name varchar2(40));

    表级定义:
    表级定义是指在定义了所有列后,再定义约束,这里需要注意
    not null约束只能在列级上定义
    create table test(id number,
    name varchar2(40),
    constraint pk_id primary key id --->表级定义
    );

    ================
    复合主键
    ================
    一般情况下:使用列级定义即可,但是如果遇到定义复合主键(两列一起作为主键)
    create table test(
    iduser number(4),
    idgoods number(4),
    nums number(4),
    constraint pk_user_goods primary key(iduser, idgoods) --->复合主键
    );
    不推荐使用复合主键

  • 相关阅读:
    截图、贴图神器——Snipaste
    MySQL (InnoDB)在什么情况下无法使用索引
    美化博客园样式
    《快速阅读》全书脉络梳理
    MySQL 配置统计数据
    使用 MWeb + Typora 写作并发布到博客园
    浅谈操作系统的用户态和内核态
    一个后端工程师的开发软件
    程序写日志文件时该不该加锁 & PHP 写日志为什么加锁
    《小岛经济学》读书笔记
  • 原文地址:https://www.cnblogs.com/qintangtao/p/2746720.html
Copyright © 2011-2022 走看看