用户名:  密码:   
您当前的位置:首页 > SQL数据库 >  Oracle > 

第21讲 使用sql语句添加与删除字段主键,非空,不允许重复,外键,以字段值范围的各种约束

上次修改时间: 2015-10-21 17:30:48      来源:网络总结      作者:钢铁长陈
上一页      路径:DSD\Learn\SQL数据库相关\Oracle数据库学习\韩顺平.玩转oracle教程笔记1_30讲\      下一页

使用sql语句添加与删除字段主键,非空,不允许重复,外键,以字段值范围的各种约束

一、sql语句命令中设置字段非空,不允许重复,主键,关联其它表字段,字段值的范围
注:维护数据的完整性主要使用约束,触发器,应该程序(过程,函数)三种方法实现
1.设置不允许为空(not null):在字段后加not null,例:name varchar2(50) not null;
2.设置不允许重复(unique):在字段后加unique,例:email varchar2(50) unique
3.设置字段为主键(primary key):在字段后加primary key,例:customerId char(8) primary key, //注:主键的值不能重复,也不能为null,一个表只能有一个主键,但可有联合主键
4.设置字段与其它字段关联,外键(foreign key):在字段后加references 要关联的表名(要关联的字段名),例:references customer(customerId)
5.设置字段值的范围(check):在字段后加check(字段名 in/between/>/< 值)
例1,sex char(2) default '男' check(sex in ('男','女')),
例2,nums number(10) check (nums between 1 and 30))
例3,unitprice number(10,2) check(unitprice>0),

二、使用sql语句设置建表与约束实例,以商店售货系统表设计为例
1.//建立货品表,在sql语句中给字段设置主键,约束字段值的范围,check >/<
create table goods(  //创建名为goods的表
goodsId char(8) primary key,//设置goodId字段为主键
goodsName varchar2(30), //设置goodsName的字符类型为变长30个
unitprice number(10,2) check(unitprice>0), //使用check约束unitprice字段的值必须大于0
category varchar2(8),//设置category字段的类型为变长8个字符--类别
provider varchar2(30));//设置provider字段的类型为变长30个字符
2.建立客户表,在sql语句设置字段主键,非空,不允许重复及字段值的check...in...选择值
create table customer( //创建名为customer的表
customerId char(8) primary key,//设置customerId为主键
name varchar2(50) not null, //设置name字段的值不能为空
address varchar2(50),
email varchar2(50) unique, //设置email字段的值不能重复
sex char(2) default '男' check(sex in ('男','女')), //设置sex字段的缺省值为“男”,它的值只能为“男”和”女“
carId char(18) );//设置carId字段的字符为定长18个字符
注:提示“缺少或无效选项”错误,指示错误在第一行最后左括号位置,实际是把里面的primary写成了parimary
3.建立购买表,在sql语句中设置字段与其它字段的关联,及字段check...between...开始值到结束值的范围
create table purchase(
customerId char(8) references customer(customerId),//设置本表的customerId字段和customer表的customerId字段关联
goodsId char(8) references goods(goodId),//设置本表的goodsId字段和goods表的goodId字段值关联
nums number(10) check (nums between 1 and 30)); //设置nums字段的值为10位整数,并强制其值在1到30之间。

三、修改与删除字段约束
1.给已经建好的表添加和删除约束,使用alter table, modify,constraint为关键字
使用alter table增加约束,增加not null
alter table goods modify goodsName not null;  //设置goods表的goodsName字段的值不能为空
alter table customer add constraint cardunique unique(cardId); //修改customer表的cardId字段的值不允许重复,这里constraint为设置约束关键字,cardunique为给这个约束自定义的名称
alter table customer add constraint address check(address in ('东城','西城','','',''); //修改customer表给的address字段增加约束,设置其值只能在后面的值中选择
2.删除已有的约束
alter table 表名 drop constraint 约束名称;  //删除约束名称
alter table 表名 drop primary key; //删除主键
alter table 表名 drop primary key cascade; //当主键有外键时

四、使用pl.sql工具查看表各字段的约束信息
可通过查询数据字典,或用pl.sql工具查看
命令见视频。。。未演示

五、列级定义和表级定义的概念
列级定义,是每写一个字段就在后面定义约束
表级定义,是先把表和它的所有字段建立好,再通过编辑的方式定义约束