oracle条件表示匿名列,跟我一起学Oracle 11g【6】----Oracle中表的约束(二)

前言

在上一个章节中,说了一些表的基本操作,现在今天我们来看看表中一些特别有用的东东。在我们项目开发中,为了防止用户向表中添加不符合语义的数据,比如一个时间字段,你肯定不能往里面填非时间字段的数值。这里就会用到我们今天讲的的完整性约束咯。

完整性约束指的是数据库中数据的正确性和相容性。主要指下面的:

primary key 主键

foreign key 外键

unique 唯一

not null 非空

check 检查约束

在Oracle中,使用constraint(英文的意思就是约束)关键字 为约束命名。如果用户没有命名,那么系统会自动会用户创建的约束命名。

OK,那我们接着就详细讲讲这些。

一。Not null 约束

从字面很好理解,就是非空约束,表示某些列的值不可缺少的,在插入数据的时候,如果没有为它赋值,那么会提示错误。

1.1 创建表的时候使用not null 约束

这个很简单,我们在先前的实例中就有很多这样的例子,如下表:

166a09f484295172f771543bf1e1e0c0.png

不在细说。

1.2在已经创建的表中添加not null 约束

语法如下:

alter table 表名 modify 列名 not null

很好理解,如下:

d6c9fab557bf6acfb77c0df0d9059f0a.png

1.3not null错误重现

f1c3042d8068e0763f6b1eee4099e854.png

1.4删除表中的not null 约束

语法如下:

alter table 表名 modify 列名 null

eef5113df3d78071a41907b1982f7ae5.png

二。primary key 约束(主键约束)

主键约束在表中定义一个主键来唯一确定表中每一行数据的标识符。

NOTE:一个表中 只能定义一个primary key 约束(注意,但是可以有多个字段为primary key)。

Oracle 会主动的为具有primary key约束的列建立一个唯一索引。

2.1 建表时创建primary key 约束

2f1fca16dbf46a2f7919c2f0ee904786.png

2.2 添加primary key约束

语法:

alter table 表名 add constraint 自定义约束名 primary key(列名);

b758e24b2fc2cf6c9e3f34cc8a2bc43e.png

2.3.匿名约束

如果是添加匿名约束,那么就不需要在上面指定constraint关键字了,系统会自动的创建。

f56d41261c8804583f4fc871ff66e585.png

2.4.删除约束

如果你在插入数据的时候,插入了相同的值,就会报错,如下:

a0fa33004f699d424bc7fb7e99904a25.png

删除约束,也很简单哦!~,可能聪明的你已经猜出咯呀。。

语法:

alter table 表名 drop constraint 约束名

三。Unique约束

按照字面的意思是说,唯一性,也很好理解,就是指该列中不能包含有重复的值。

18ba199ee1dbf9337b2a1ac2287be2a6.png

如果想在新建了table之后,在进行添加unique的约束,和上面的一样,语法如下:

alter table 表名 add unique(列名)

四。Check 约束

所谓的Chck约束至的是检查性约束,使用CHECK约束时,将对输入的每一个数据进行检查,只有符合条件的记录才会保存到表中。

aa59490e624f1edfdba6076e9b3e5c18.png

上面我们检查了学生表中的年龄不能小于0,如果小于0 则会报错!。

如果想在新建了table之后,在进行添加check的约束,和上面的一样,语法如下:

alter table 表名 add constraint 约束名 check(列名+条件)

如果要删除check约束,也很简单哦,只需要如下操作:

alter table 表名 drop constraint 约束名

五。Foreign key约束

指的是外键约束,外键指的是引用另外一个表中的某一列或几列的值。

5.1外键特点

1.囚为某列定义了foreign key约束,则该列的取值只能是引用表的值或者是null

2.可以在一个表中为多个列设置foreign key

3.定义了foreign key时,与被引用的主键列可以是在同一个表,这个叫“自引用”

5.2 创建外键

OK,一个学生表myStudent和一个班级表,学生表中的一个字段所在班级,外键到班级表中的班级编号!。

创建一个班级:

0c04104dafaf233e697c36b31c61e5b9.png

创建一个学生表:

a8c8d132a826ecb8010d8d42ae8c05f1.png

OK,上面的外键约束就创建好了。

现在如果向myStudent表插入数据,如果studentClass的值在class中没有是会报错的。

ebc28ff3dcbcb1723f8cd8ddc9d8088a.png

如果想在新建了table之后,在进行添加foreign key的约束,和上面的一样,语法如下:

alter table 表名 add constraint 约束名 foreign key(列名) referenc 表名(列名)

5.3删除

我们在前面一节说过,因为有主外键关系,所以如果删除一个有外键的表,会报错。那如果,你一定要删除的话,也可以,需要加下面的参数:

使用cascade,因为和前面一张内容一样,所以不再说明了。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值