how2j.cn


工具版本兼容问题
约束种类
唯一约束 unique 不可重复
非空约束 not null 不能为空必须制定值
主键约束 primary key 通常是给id使用的,同时具备了unique和not null约束
外键约束 foreign key


步骤 1 : 创建表的时候设置约束   
步骤 2 : 给约束命名   
步骤 3 : 给已经存在的表增加约束   
步骤 4 : 删除约束   
步骤 5 : 创建外键约束   

步骤 1 :

创建表的时候设置约束

edit
以唯一约束为例子:
首先删除表hero

drop table hero

然后再重新创建表hero,并且在创建表hero的时候,设置约束

create table hero(
id number,
name varchar2(30) unique,
hp number,
mp number,
damage number,
armor number,
speed number
)

通过关键字unique给name加上了唯一约束
增加数据的时候,name 就不能重复了
这个时候重复执行下面的sql语句,加入相同的name的数据就会提示出错

insert into hero (id,name,hp,mp,damage,armor,speed) values(1,'炸弹',450,200,45,4,30);
创建表的时候设置约束
上一步提示违反的约束名称是 SYS.SYS_C003997 这个名字是系统自动分配的。 可以在创建表的时候指定约束名称

create table hero(
id number,
name varchar2(30),
hp number,
mp number,
damage number,
armor number,
speed number,
constraint uk_hero_name unique (name)
)

uk_hero_name即指定的约束名称。
uk 代表 unique
hero 代表表名
name 代表字段
约束名称是自定义的,但是易读性高的约束命名方式,更加便于调试与维护
当加入name存在的数据的时候,就会提示违反uk_hero_name这个约束

insert into hero (id,name,hp,mp,damage,armor,speed) values(1,'炸弹',450,200,45,4,30);
给约束命名
步骤 3 :

给已经存在的表增加约束

edit

alter table hero add constraint pk_hero_id primary key (id)

给已经存在的表hero的id字段加上主键约束

alter table hero drop constraint uk_hero_name
步骤 5 :

创建外键约束

edit
外键指的是本表的某一个字段,指向另一张表的主键(或者是有唯一约束的字段)

击杀记录表,用于记录英雄彼此之间的击杀数量


create table kill_record(
id number,
killerid number,
killedid number,
number_ number,
constraint fk_killer_hero foreign key (killerid) references hero(id),
constraint fk_killed_hero foreign key (killedid) references hero(id)
)

killerid 存放击杀英雄的id
killedid 存放被击杀英雄的id
number_ 存放击杀了多少次(因为number是关键字,所以使用number_作为字段名)
假设hero中分别有id=2,3的记录,那么

insert into kill_record (id,killerid,killedid,number_) values(1,2,3,1);

即表示英雄2 击杀了 英雄3 一次

约束的作用,是保证插入的数据的一致性,所以在试图插入数据

insert into kill_record (id,killerid,killedid,number_) values(1,2,300,1);

的时候会失败,因为hero表里没有id=300的数据,这样就违反了外键约束
创建外键约束


HOW2J公众号,关注后实时获知最新的教程和优惠活动,谢谢。


提问之前请登陆
提问已经提交成功,正在审核。 请于 我的提问 处查看提问记录,谢谢
关于 数据库-oracle-约束 的提问

尽量提供截图代码异常信息,有助于分析和解决问题。 也可进本站QQ群交流: 578362961
提问尽量提供完整的代码,环境描述,越是有利于问题的重现,您的问题越能更快得到解答。
对教程中代码有疑问,请提供是哪个步骤,哪一行有疑问,这样便于快速定位问题,提高问题得到解答的速度
在已经存在的几千个提问里,有相当大的比例,是因为使用了和站长不同版本的开发环境导致的,比如 jdk, eclpise, idea, mysql,tomcat 等等软件的版本不一致。
请使用和站长一样的版本,可以节约自己大量的学习时间。 站长把教学中用的软件版本整理了,都统一放在了这里, 方便大家下载: https://how2j.cn/k/helloworld/helloworld-version/1718.html

上传截图