[Oracle]面试官:你简单说说常用的4种约束

【版权声明】未经博主同意,谢绝转载!(请尊重原创,博主保留追究权)
https://blog.csdn.net/m0_69908381/article/details/140865862
出自【进步*于辰的博客

参考笔记一,P22.18~22。

1、介绍

“约束”是一种对数据表字段存储数据的限制,分为主键(primary key)、唯一键(unique)、外键(foreign key)、check约束、not null约束。

操作命令:

--添加约束--
alter table 表名 add constraint 约束名 约束类型(字段);

--删除约束--
alter table 表名 drop constraint 约束名;

--启用/禁用约束--
alter table 表名 enable/disable constraint 约束名;

数据字典:

--当前用户旗下所有数据表的所有约束--
user_constraints
--当前用户旗下所有数据表的所有约束所属的字段名--
user_cons_columns

2、外键约束

外键会将两个数据表进行关联(子表字段数据来源主表,:子表相应字段可为 null),进而对子表相应字段的数据进行限制。

创建命令:

alter table 子表 add constraint 外键名 foreign key(字段1) references 主表(字段2);

这里就有个问题:若主表记录被删除,那么子表中相应数据该何去何从?

可在上述命令后增加一条子句,可以决定这些数据的去向,4种定义:

  1. on delete cascade:表示子表中相应数据将连同删除;
  2. on delete set null:表示子表中相应数据将被置空(null);
  3. Restrict:表示若子表中存在相应数据,则提示主表记录不能删除;
  4. on delete no action:表示子表不受影响。

这种机制也称为“级联删除”。必然的,另一种是“级联更新”,即on update,其取值也是以上4种。

3、check 约束

此约束用于限制数据范围,其内不允许使用伪列,如:rownum

创建命令:

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

示例:(注:创建命令是固定的,故示例中仅展示“条件”部分)

# 限制取值
sex in (0, 1)

# 限制范围
1、age > 0 and age < 120
2、age between 0 and 120
# 这样仅能用于限制整数,如“工资”此类的小数无法如此添加限制

# 限制模式
regexp_like(phone, '192\d{8}');		// 中国广电手机号
regexp_like(email, '\w+@[\w&&[^_]]+\.com');		// 邮箱
regexp_like(id_card, '^[1-9]\d{5}(18|19|([23]\d))\d{2}((0[1-9])|(10|11|12))(([0-2][1-9])|10|20|30|31)\d{3}[0-9Xx]$');	//  十八位身份证号
# 条件中可以使用函数,如sysdate、uid()、user()、userenv()

regexp_like()可查阅博文《[Oracle]面试官:你举例几个内置函数,并且说说如何使用内置函数作正则匹配》中的【正则表达式相关函数】一栏。

4、not null 约束

添加约束命令:

alter table 表名 modify(字段 constraint 约束名 not null)

因为not null约束仅能定义于字段,即列约束,故不能使用...add constraint...命令添加。

最后

掌握约束,我建议:少用可视化工具(如:plsql、navicat)操作,手打命令。

本文完结。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

进步·于辰

感谢打赏!很高兴可以帮到你!!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值