Oracle约束

本文详细介绍了Oracle数据库中的约束概念及其应用,包括not null、unique、primary key、foreign key和check五种主要约束类型,并通过具体实例展示了如何在创建表时设置这些约束以及如何在表创建后添加或修改约束。

约束

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

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

   主要包括:not null  、 unique  、primary  key、foreign 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约束

转载于:https://www.cnblogs.com/Jims2016/p/5607240.html

### Oracle 数据库中的约束Oracle数据库中,约束用于强制实施数据完整性规则。通过定义这些规则,可以确保输入到表中的数据满足特定条件,从而维护数据的一致性和准确性。 #### 主要的约束类型及其功能 1. **NOT NULL** 这种类型的约束防止列接受NULL值。一旦设置了此约束,在该列上不允许插入任何未指定的数据[^2]。 2. **UNIQUE** UNIQUE约束保证一列或多列组合中的所有值都是唯一的。这意味着在一个具有唯一键约束的字段里不能有两个相同的值存在。这有助于保持实体之间的关系不被破坏。 3. **PRIMARY KEY** PRIMARY KEY是由一个或多个非空(即带有 NOT NULL 属性)且唯一的列组成的特殊形式的UNIQUE约束。它用来唯一标识每一行记录,并作为其他表之间建立关联的基础。 4. **FOREIGN KEY** FOREIGN KEY约束指定了两个表间的关系,其中一个表称为父表而另一个为子表。外键通常指向另一张表里的主键或者候选键,以此来维持参照完整性。当尝试向子表添加新纪录时,如果对应的父表中不存在匹配项,则操作会被拒绝。 5. **CHECK** CHECK约束允许设定某些条件下才能插入或更新某列上的值。例如,可以通过设置年龄大于0这样的简单表达式来限定用户的出生日期范围;也可以更复杂地涉及多列间的逻辑运算。 #### 创建带约束的表格实例 下面给出了一些如何创建包含不同种类约束的新表的例子: ```sql CREATE TABLE employees ( employee_id NUMBER(6), first_name VARCHAR2(20), last_name VARCHAR2(25) CONSTRAINT emp_last_name_nn NOT NULL, email VARCHAR2(25) CONSTRAINT emp_email_uk UNIQUE, hire_date DATE CONSTRAINT emp_hire_date_nn NOT NULL, job_id VARCHAR2(10) CONSTRAINT emp_job_nn NOT NULL, salary NUMBER(8,2), commission_pct NUMBER(2,2), manager_id NUMBER(6), department_id NUMBER(4), CONSTRAINT emp_salary_min CHECK (salary > 0), -- 检查工资必须大于零 CONSTRAINT emp_dept_fk FOREIGN KEY (department_id) REFERENCES departments(department_id) ON DELETE SET NULL,-- 外部键引用部门表并设为空 CONSTRAINT pk_emp PRIMARY KEY(employee_id)-- 设置主键 ); ``` 上述SQL语句展示了怎样利用多种约束来构建一张名为`employees`的工作人员信息表单。这里包含了对姓名、电子邮件地址以及雇佣日期等属性施加的不同层次的要求,同时还建立了与其他相关联对象——比如部门——之间的联系。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值