Oracle_约束

来源:互联网 发布:在淘宝怎么评论 编辑:程序博客网 时间:2024/05/17 07:35

/*
商店售货系统表设计案例1
现有一个商品的数据库,记录客户及其购物情况,由下面三个表组成:
商品goods(商品号goodsId,商品名goodsName,单价unitprice,商品类别category,供应商provider);
客户customer(客户号customerId,姓名name,住址address,电邮email,性别sex,身份证cardId);
购买purchase(客户号customerId,商品号goodsId,购买数量nums);
用SQL语言完成下列功能:
1.建表,在定义中要求声明:
(1)每个表的主外键;
(2)客户的姓名不能为空值;
(3)单价必须大于0,购买数量必须在1到30之间;
(4)电邮不能够重复;
(5)客户的性别必须是男或者女,默认是男
*/
SQL> create table goods(goodId char(8) primary key,--主键
  2  goodsName varchar2(30),
  3  unitprice number(10,2) check(unitprice>0),
  4  category varchar2(8),
  5  proveder varchar2(30));
 
Table created
 
SQL> create table customer(customerId char(8) primary key,--主键
  2  name varchar2(50) not null,--不为空
  3  address varchar2(50),
  4  email varchar2(50) unique,
  5  sex char(2) default '男' check(sex in('男','女')),
  6  cardId char(18));
 
Table created
 
SQL> create table purchase(customerId char(8) references customer(customerId),
  2  goodsID char(8) references goods(goodId),
  3  nums number(10) check(nums between 1 and 30));
 
Table created
 
 SQL>
------------------------------------------------------------------------
/*
商店售货系统表设计案例1
如果在建表时忘记建立必要的约束,则可以在建表后使用alter table命令为表增加约束,但是要
注意:增加not null约束时,需要使用modify选项,而增加其它四种约束使用add选项。
(1)每个表的主外码;
(2)客户的姓名不能为空值;--增加商品名也不能为空;
(3)单价必须大于0,购买数量必须在1到30之间;
(4)电邮不能够重复;--增加身份证也不重复;
(5)客户的性别必须是'男'或者'女',默认是男;
(6)增加客户的住址只能是'海淀','朝阳','东城','西城','通州','崇文' ;
*/
SQL>alter table goods modify goodsName not null;
SQL>--添加约束
SQL>alter table customer add constraint cardunique unique(cardId);
SQL> alter table customer add constraint addresscheck check(address in('东城','西城','海淀','朝阳','通州','崇文'));
SQL>--删除约束
SQL>alter table customer drop constraint addresscheck;
SQL>
SQL> alter table customer add constraint addresscheck check(address in('东城','西城','海淀','朝阳','通州','崇文'));
SQL>--在删除主键的时候,必须带上cascade选项
SQL>alter table customer primary key cascade;
SQL>--添加主键
SQL>alter table customer add constraint pkkey primary key(customerId);
SQL>--查看约束信息
SQL> select constraint_name,table_name,r_owner,r_constraint_name
  2  from all_constraints where table_name='goods' and table_name='customer';
SQL> 
SQL> --列给定义
SQL> --列级定义,即在定义列的同时定义约束
SQL> create table department4
  2     (dept_id number(2) constraint pk_department primary key,
  3     name varchar2(12),
  4     loc varchar2(12));
SQL> --表级定义
SQL> --表级定义,是指在定义了所有列后再定义约束,但是not null约束只能在列级上定义
SQL> create table employee2
  2   (emp_id number(4),name varchar2(15),dept_id number(2),
  3   constraint pk_employee primary key (emp_id),
  4   constraint fk_department foreign key (dept_id)
  5   references department4(dept_id));
  
 SQL>