• Oracle约束


    约束

      作用:确保数据库满足特定的商业规则。

          解释例如某个表的字段中,性别只能规定男和女,年龄不能为负数等一些规则。

       主要包括:not null  、 unique  、primary  keyforeign key  和  check 五种

       not null:很简单,表示该字段不能为空值

       unique:表示字段不能重复,是唯一的

       primary key:主键

       foreign key: 外键

       check : 约束,例如规定性别只能男女

    SQL> create table goods(
       goodsId char(8) primary key, --主键
       goodsName varchar2(30),
       unitprice number(10,2) check(unitprice>0),
       category varchar2(8),
       provider varchar2(30)
    );
    SQL> create table customer( 
       customerId char(8) primary key, --主键
       name varchar2(50) not null, --不为空
       address varchar2(50),
       email varchar2(50) unique, --唯一
       sex char(2) default '' check(sex in ('','')), -- 一个char能存半个汉字,两位char能存一个汉字
       cardId char(18)
    );
    SQL> create table purchase( 
       customerId char(8) references customer(customerId),
       goodsId char(8) references goods(goodsId),
       nums number(10) check (nums between 1 and 30)
    );
    表是默认建在SYSTEM表空间的

    下面做一个简单的例子来使用这个约束

        商店售货系统表的设计:

       商店的数据库,用来记录客户及购物情况,这里由下面三张表组成:

    商品表(goods):                                             客户表(customer):                                              购买表(purchase):

         商品号:goodsId                                                 客户号:customerId                                                 客户号:customerId

         商品名:goodsName                  姓名:name                       商品号:goodsId

      单价:unitprice                  住址:addrss                      购买数量:nums

      商品类别:category                邮箱:email

         供应商:provider                  性别:sex

                                                                                身份证:cardId

    声明:

       1.每个表的主外键

       2.客户的姓名不能为空

       3.单价必须大于0,且购买数量必须在1到30之间

       4.邮箱不能重复

     5.客户的性别必须是男或者女,默认是男。

    商品表:

    1 create table goods (
    2  goodsId char(8) primary key,  --定义主键
    3  goodsName varchar2(50),
    4  unitPrice number(10,2),
    5  category varchar2(30),
    6  provider varchar2(30));

    顾客表:

    1 --顾客表
    2  create table customer(
    3  customerId char(8) primary key,
    4  name varchar2(50),
    5  address varchar2(50),
    6  email varchar2(50) unique,
    7  sex char(2) default '' check(sex in ('','')),
    8  cardId char(18));
    9  

    购买表:

    1  --购买表
    2  create table purchase (
    3   customerId char(8) references customer(customerId), --外键
    4   goodsId char(8)references goods(goodsId), --外键
    5   nums number(10) check(nums between 1 and 30));

     那么在表创建好之后,发现需要添加约束怎么办呢?

    介绍两种定义:列级定义表级定义

    列级定义:在建表的同时,就将约束加上去

    表级定义:表创建完成后,再单独为其增加约束

    建表时忘记建立必要的约束,可以用表级定义,alert table 命令为表增加约束。

    注意:增加not null约束时,需要使用modify选项,其他用add选项

    alter table goods modify goodsName not null;
    alter table customer add constraint cardUnique unique(cardId);   --阴影部分为约束的名称
    alter table customer modify name not null;
    alter table customer add constraint addresCheck check(address in ('婺源','北京','上海','南京','武汉','大连','哈尔滨'));

    对应的删除约束的方法是(注意cascade):

    alter table 表名 drop constraint 约束名称
    alter table 表名 drop primary key ;
    alter table 表名 drop primary key cascade;  

    注释:cascade代表与其他表之间的连带关系一并删除。

     Oracle约束

  • 相关阅读:
    Nginx与Apache的对比
    gc buffer busy waits(ZT)
    Brocade SAN Switch Change Domain ID (ZT)
    Oracle异机恢复时报错ora19870 ora19507
    row cache lock (ZT)
    can a select block a truncate (ZT)
    NBU常用命令
    the RRD does not contain an RRA matching the chosen C
    Solaris10 x64安装64bit perl
    Solaris and Oracle 32bit Linking Error "fatal: symbol 'ntcontab'
  • 原文地址:https://www.cnblogs.com/Jims2016/p/5607240.html
Copyright © 2020-2023  润新知