10、Oracle中的约 束constraint

最近项目要用到Oracle,奈何之前没有使用过,所以在B站上面找了一个学习视频,用于记录学习过程以及自己的思考。
视频链接:
【尚硅谷】Oracle数据库全套教程,oracle从安装到实战应用
如果有侵权,请联系删除,谢谢。

学习目标:

  • 描述约束

  • 创建和维护约束

1、什么是约束

约束是表级的强制规定

有以下五种约束:

  • NOT NULL
  • UNIQUE
  • PRIMARY KEY
  • FOREIGN KEY
  • CHECK

注意事项

  • 如果不指定约束名 ,Oracle server 自动按照 SYS_Cn 的格式指定约束名

  • 创建和修改约束:

    • 建表的同时
    • 建表之后
  • 可以在表级或列级定义约束

  • 可以通过数据字典视图查看约束

1.1、表级约束和列级约束

作用范围:
①列级约束只能作用在一个列上
②表级约束可以作用在多个列上(当然表级约束也可以作用在一个列上)

定义方式: 列约束必须跟在列的定义后面,表约束不与列一起,而是单独定义。

非空(not null) 约束只能定义在列上

2、定义约束

格式:

CREATE TABLE [schema.]table(column datatype [DEFAULT expr][column_constraint],...[table_constraint][,...]);

示例:

CREATE TABLE employees(employee_id  NUMBER(6),first_name   VARCHAR2(20),...job_id       VARCHAR2(10) NOT NULL,CONSTRAINT emp_emp_id_pk PRIMARY KEY (EMPLOYEE_ID));

列级

column [CONSTRAINT constraint_name] constraint_type,

表级

column,...[CONSTRAINT constraint_name] constraint_type(column, ...),

3、NOT NULL 约束

保证列值不能为空:

只能定义在列级:

DBeaver 通过下面方式查看:选中查看的表 -> 属性 -> 约束 即可查看。

4、UNIQUE 约束

唯一约束,允许出现多个空值:NULL。

可以定义在表级或列级:

CREATE TABLE employees(employee_id      NUMBER(6),last_name        VARCHAR2(25) UNIQUE,   -- 系统命名email            VARCHAR2(25),salary           NUMBER(8,2),commission_pct   NUMBER(2,2),hire_date        DATE NOT NULL,
...  CONSTRAINT emp_email_uk UNIQUE(email));  -- 用户自定义命名

可以声明在email后面:CONSTRAINT emp_email_uk UNIQUE,也可以如此末处声明。

5、PRIMARY KEY 约束

可以定义在表级或列级:

CREATE TABLE   departments(department_id        NUMBER(4),department_name      VARCHAR2(30)CONSTRAINT dept_name_nn NOT NULL,manager_id           NUMBER(6),location_id          NUMBER(4),CONSTRAINT dept_id_pk PRIMARY KEY(department_id));  -- 定义主键

6、FOREIGN KEY 约束

可以定义在表级或列级:

CREATE TABLE employees(employee_id      NUMBER(6),last_name        VARCHAR2(25) NOT NULL,email            VARCHAR2(25),salary           NUMBER(8,2),commission_pct   NUMBER(2,2),hire_date        DATE NOT NULL,
...department_id    NUMBER(4),CONSTRAINT emp_dept_fk FOREIGN KEY (department_id)REFERENCES departments(department_id), -- 定义外键CONSTRAINT emp_email_uk UNIQUE(email));

6.1、FOREIGN KEY 约束的关键字

  • FOREIGN KEY: 在表级指定子表中的列
  • REFERENCES: 标示在父表中的列
  • ON DELETE CASCADE: 级联删除。当父表中的列被删除时,子表中相对应的列也被删除
  • ON DELETE SET NULL: 级联置空。子表中相应的列置空
create table emp (id number(10) primary key,name varchar2(26) unique,sal number(8, 2),dept_id number(4),constraint dept_fk foreign key(dept_id) references dept(dept_id) on delete cascade
);

7、CHECK 约束

定义每一行必须满足的条件

..., salary	NUMBER(2)CONSTRAINT emp_salary_min  CHECK (salary > 0),...

示例:

create table emp (id number(10) primary key,name varchar2(26) unique,sal number(8, 2) check(sal > 0 and sal < 1000000),dept_id number(4),constraint dept_fk foreign key(dept_id) references dept(dept_id) on delete set null
);

8、添加约束的语法

使用 ALTER TABLE 语句:

  • 添加或删除约束,但是不能修改约束
  • 有效化或无效化约束
  • 添加 NOT NULL 约束要使用 MODIFY 语句
  ALTER TABLE	 tableADD [CONSTRAINT constraint] type (column);

以create table emp as select * from employees;为例,添加和删除约束

alter table emp modify(empname varchar2(50) not null);

8.1、添加约束

添加约束举例

ALTER TABLE     employees
ADD CONSTRAINT  emp_manager_fk FOREIGN KEY(manager_id) REFERENCES employees(employee_id);
Table altered.

8.2、删除约束

从表 EMPLOYEES 中删除约束

ALTER TABLE      employees
DROP CONSTRAINT  emp_manager_fk;
Table altered.

8.3、无效化约束

在ALTER TABLE 语句中使用 DISABLE 子句将约束无效化。

ALTER TABLE		employees
DISABLE CONSTRAINT	emp_emp_id_pk;
Table altered.

8.4、激活约束

  • ENABLE 子句可将当前无效的约束激活
ALTER TABLE		employees
ENABLE CONSTRAINT	emp_emp_id_pk;
Table altered.
  • 当定义或激活UNIQUE 或 PRIMARY KEY 约束时系统会自动创建UNIQUE 或 PRIMARY KEY索引

8.5、查询约束

查询数据字典视图 USER_CONSTRAINTS

SELECT	constraint_name, constraint_type,search_condition
FROM	user_constraints
WHERE	table_name = 'EMPLOYEES';结果:
CONSTRAINT_NAME |CONSTRAINT_TYPE|SEARCH_CONDITION       |
----------------+---------------+-----------------------+
EMP_LAST_NAME_NN|C              |"LAST_NAME" IS NOT NULL|
EMP_EMAIL_NN    |C              |"EMAIL" IS NOT NULL    |
EMP_HIRE_DATE_NN|C              |"HIRE_DATE" IS NOT NULL|
EMP_JOB_NN      |C              |"JOB_ID" IS NOT NULL   |
EMP_SALARY_MIN  |C              |salary > 0             |
EMP_EMAIL_UK    |U              |                       |
EMP_EMP_ID_PK   |P              |                       |
EMP_DEPT_FK     |R              |                       |
EMP_JOB_FK      |R              |                       |
EMP_MANAGER_FK  |R              |                       |

8.6、查询定义约束的列

查询数据字典视图 USER_CONS_COLUMNS

SELECT	constraint_name, column_name
FROM	user_cons_columns
WHERE	table_name = 'EMPLOYEES';结果:
CONSTRAINT_NAME |COLUMN_NAME  |
----------------+-------------+
EMP_LAST_NAME_NN|LAST_NAME    |
EMP_EMAIL_NN    |EMAIL        |
EMP_HIRE_DATE_NN|HIRE_DATE    |
EMP_JOB_NN      |JOB_ID       |
EMP_SALARY_MIN  |SALARY       |
EMP_EMAIL_UK    |EMAIL        |
EMP_EMP_ID_PK   |EMPLOYEE_ID  |
EMP_DEPT_FK     |DEPARTMENT_ID|
EMP_JOB_FK      |JOB_ID       |
EMP_MANAGER_FK  |MANAGER_ID   |

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/743483.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

nacos 服务注册原理

springboot 的各种 starter 会根据 SPI 机制,读取 META-INFO/spring.factories 文件,自动注册一些 bean,spring-cloud-starter-alibaba-nacos-discovery 的 spring.factories 如下: org.springframework.cloud.bootstrap.BootstrapConfiguration=\com.alibaba.cloud.nacos.…

光纤存储中raid5出现故障数据恢复

一、故障检测与评估 检查RAID状态: 使用RAID管理或存储管理工具检查RAID 5阵列的状态,确认故障的具体表现和受影响的硬盘。 评估数据损失: 确定哪些数据受到影响,评估数据恢复的重要性和紧急性。二、数据保护 立即停止写入操作: 一旦发现RAID 5故障,应立即停止对存储卷的…

如何避免raid掉阵

一、硬件选择与配置 选用高质量硬件: 确保RAID阵列中的硬盘、控制器等硬件组件有良好的质量和稳定性。 使用经过兼容性测试的硬件组合,以减少因硬件不兼容导致的RAID掉阵风险。 合理配置RAID级别: 根据数据的重要性、性能需求和预算选择合适的RAID级别。例如,对于关键数据,…

U盘格式化数据恢复

一、立即停止使用U盘 一旦发现U盘被格式化,立即停止使用它,避免新的数据写入覆盖原有的数据,增加恢复难度。 二、使用数据恢复三、利用Windows自带功能 如果Windows操作系统中开启了文件历史记录、备份和还原等功能,也可以尝试使用这些内置工具来恢复数据: 文件历史记录:…

什么是VMFS存储卷

VMFS(Virtual Machine File System)存储卷是VMware虚拟化环境中用于存储虚拟机文件的一种高性能集群文件系统。 一、定义与特性 定义:VMFS是专为虚拟机环境设计的一种文件系统,它允许多个虚拟机共享同一物理存储资源,并提供了数据冗余和容错机制。VMFS存储卷即为在VMFS文件…

固态硬盘无法读取怎么办

一、检查硬件连接 关闭计算机并断开电源:确保在操作过程中计算机处于关闭状态,并断开电源插头,以避免电流对硬件造成损害。 检查接口连接: 确认固态硬盘的SATA接口或M.2接口(根据硬盘类型)与主板的连接是否牢固。 检查SATA数据线或M.2插槽是否有损坏或脏污,如果有,尝试…

VMware vsphere存储管理

VMware vSphere存储管理是一个复杂而关键的过程,它涉及到虚拟化环境中存储资源的配置、优化、监控和保护。 一、存储基础数据存储类型 VMware vSphere支持多种数据存储类型,包括使用SCSI、SAS或SATA驱动器的本地存储,基于网络的存储如iSCSI和NFS,以及更昂贵的光纤通道(FC)数…

光纤存储重组raid磁盘阵列和raid数据恢复

一、光纤存储重组RAID磁盘阵列 1.确定故障类型: 首先,需要确定RAID阵列的故障类型,如硬盘离线、性能下降等。这通常通过查看RAID控制器的状态信息。 备份现有数据:如果可能,应在重组之前对现有数据进行备份,以防在重组过程中数据丢失。 2. 重组步骤 移除硬盘:按照RAID阵…

前端学习-flutter学习-010-按钮

《Flutter实战第二版》ElevatedButton(child: Text("ElevatedButton 默认带有阴影和灰色背景。按下后,阴影会变大"),onPressed: () {},),TextButton(child: Text("TextButton 默认背景透明并不带阴影。按下后,会有背景色"),onPressed: () {},),OutlinedB…