首页 > 数据库 >[Oracle]面试官:你简单说说常用的4种约束

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

时间:2024-08-02 10:50:39浏览次数:16  
标签:面试官 constraint -- 约束 Oracle 子表 null alter

【版权声明】未经博主同意,谢绝转载!(请尊重原创,博主保留追究权)
https://www.cnblogs.com/cnb-yuchen/p/18338278
出自【进步*于辰的博客

参考笔记一,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)操作,手打命令。

本文完结。

标签:面试官,constraint,--,约束,Oracle,子表,null,alter
From: https://www.cnblogs.com/cnb-yuchen/p/18338278

相关文章

  • 利用 Oracle 19c 新特性 from service 修复备库 GAP
    转发自:https://mp.weixin.qq.com/s/Jz8lEQ6QAnjoTeErbX0q_g前 言相信我们DBA在OracleDataGuard环境中遇到过因主库归档空间有限,归档日志又没有备份,空间满的时候直接删除了归档,导致丢失归档日志,而备库还没有及时接收到这个归档,导致备库出现了GAP现象。因为日志的中断,备......
  • OracleLinux9安装GlusterFS nfs-Ganesha
    安装环境系统信息NAME="OracleLinuxServer"VERSION="9.4"ID="ol"ID_LIKE="fedora"VARIANT="Server"VARIANT_ID="server"VERSION_ID="9.4"PLATFORM_ID="platform:el9"PRETTY_NAME="......
  • Oracle数据库教程:入门到精通
    Oracle数据库教程:入门到精通大家好,我是微赚淘客系统3.0的小编,是个冬天不穿秋裤,天冷也要风度的程序猿!Oracle数据库是市场上最强大的关系数据库管理系统之一。无论是大数据分析、企业级应用还是高性能交易系统,Oracle都能提供卓越的性能和可靠性。本文将带你从Oracle数据库的基本操......
  • 5分钟掌握软件测试必会mysql数据库知识(数据类型和数据约束
    mysql常用数据类型mysql的常用数据类型,主要有四种,需要我们重点掌握。1整型int整型分成两类,一类是有符号的,就是负数,一类是无符号的,就是正整数。很多时候我们需要的就是无符号的。比如年龄。2小数decimal小数的设置需要我们特别去了解一下。例如:decimal(4,2)这是表示......
  • 旧版本的Oracle OCM证书怎么升级到最新版本?
    一、先来说一下OCM认证,全称是:OracleCertifiedMaster-Oracle认证大师,是Oracle数据管理员的最高级别的认证。有了OCM证书,可以证明你的专业能力,是Oracle数据库管理方面具备高级和全面技能的权威认证。在竞争激烈的IT就业市场中,OCM证书能够让您从众多求职者中脱颖而出。要......
  • 甲骨文云 (Oracle Cloud) 开启IPV6
    VCN处理1、给VCN附加IPV6​​​​​​‍2、VCN路由表添加路由​​​​​​‍子网处理3、给子网附加IPV6​​4、子网ACL添加放行IPV6防火墙规则实例会受到到子网ACL和实例安全组ACL的双重控制,所以子网这里可以放行大些。具体限制在实例安全组进行控制。​​......
  • WebApi连接数据库报错:尝试加载Oracle客户端时引发BadImageFormatException
    出现的问题  今天在公司用C#搭建一个WebApi服务,接受请求并连接数据库进行查询,但连接数据库时报错:尝试加载Oracle客户端时引发BadImageFormatException。如果安装32位客户端组件的情况下以64位模式运行,将出现此问题。问题点  我之后了解点,确定了OracleClient客户端确实安装......
  • Oracle INSTR和LIKE转换注意事项
     OracleINSTR和LIKE转换注意事项 A式:INSTR(A.G_NO||',',B.G_NO||',')>=1和B式:INSTR(A.G_NO,B.G_NO)>=1等价吗不等价,1、B.G_NO有空值的情况,假设A.G_NO也为空值,则A式为','和','比较是成立的,即空值和空值是符合的,而B式则不符合假设A.G_NO='XXXX',则A式为�......
  • Oracle VM VirtualBox创建虚拟机相关问题
    这次直接使用virtualbox来进行虚拟机的创建和运行。在控制项里新建一台虚拟电脑,然后就是正常的选择虚拟镜像以及设置账户密码。我正常的就给虚拟机分配4G内存,处理器4CPU,然后磁盘空间分配个16G,当然后续都是可以进行调整的。之后就是系统的安装时间了,一段不算短的等待过后,终于出现......
  • PuLP 模型不遵循指定的约束
    代码:defadd_constraints(概率,发电机,power_vars,需求):#绝对差异变量绝对差异变量={}对于发电机中的gen:名称=gen["名称"]对于tinrange(1,len(demand)):abs_diff_vars[(name,t)]=mud.LpVariable(f"abs_diff_{name}_{t}",lowBound=0)#DemandSatisfactionConst......