步骤 2 : 给约束命名 步骤 3 : 给已经存在的表增加约束 步骤 4 : 删除约束 步骤 5 : 创建外键约束
以唯一约束为例子:
首先删除表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); alter table hero add constraint pk_hero_id primary key (id) 给已经存在的表hero的id字段加上主键约束 alter table hero drop constraint uk_hero_name
外键指的是本表的某一个字段,指向另一张表的主键(或者是有唯一约束的字段)
击杀记录表,用于记录英雄彼此之间的击杀数量 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公众号,关注后实时获知最新的教程和优惠活动,谢谢。
提问之前请登陆
提问已经提交成功,正在审核。 请于 我的提问 处查看提问记录,谢谢
|