1 事务

事务的任务便是使数据库从一种状态变换成为另一种状态,这不同于文件系统,它是数据库所特用的。

所有的数据库中,事务只针对DML(增删改),不针对select

select只能查看其他事务提交或回滚的数据,不能查看别的事务中正在进行的操作

1.1 事务的特性

  • 原子性(Atomicity)

语句级原子性,过程级原子性,事务级原子性

  • 一致性(Consistency)

状态一致,同一事务中不会有两种状态

  • 隔离性(Isolation)

事务间是互相分离的互不影响

  • 持久性(Durability)

事务提交了,那么状态就是永久的

1.2 开启事务

  • 执行任意的DML语句,会自动开启事务
--语句级:锁定语句所影响的记录行
update dept set loc = 'beijing' where deptno=10;
  • 创建回滚点
--过程级
savepoint a
  • 锁定整张表
select * from 表名 for update

1.3 事务语句

commit=commit work:提交事务.将本次事务中的DML操作全部持久化,并结束本次事务

rollback=rollback work:回滚事务.将本次事务中的DML操作全部取消,并结束本次事务

savepoint:手动开启事务,并创建回滚点

rollback to savepoint:回滚到指定的回滚点前,滚点之后创建的回滚点与DML操作无效

1.4 事务锁

当执行事务操作时,Oracle会在被作用的表上加锁,防止其他用户改表。

Oracle保证读一致性,并且永远都不会脏读(即读其他事务的未提交数据)。

--此时其它会话无法修改改行记录
update dept set loc = 'beijing' where deptno=10;

1.5 提交事务

使用commit语句可以提交事务,当执行了commit语句后,会确认事务的变化,结束事务,删除保存点,释放锁。

当使用commit语句结束事务之后,其他会话将可以查看到事务变化后的新数据。

savepoint a;
update dept set loc = 'beijing' where deptno=10;
--提交事务之后,回滚点被自动删除
commit;

1.6 回退事务

保存点是事务中的一点,用于取消部分事务,当结束事务时,会自动的删除该事务所定义的所有保存点。

update dept set loc = 'beijing' where deptno=10;
savepoint a;
update dept set loc = 'beijing' where deptno=20;
savepoint b;
update dept set loc = 'beijing' where deptno=30;
--回滚后,回滚点a之后执行的语句全部无效,包括回滚点b的创建
rollback to a;
--回滚全部事务,未提交的事务操作全部失效
rollback;

1.7 注意

在ORACLE中没有提供开始事务处理语句,所有的事务都是隐式开始的。也就是说ORACLE中用户不可以显式使用命令来开始一个事务。

ORACLE任务第一条修改数据库的语句,或者一些要求事务处理的场合都是事务隐式的开始。

但是当用户想要处理一个事务结束时,必须使用commit和rollback语句结束。

2 序列

2.1 sequence

ORACLE中,主键不支持自动增长,管理起来较为麻烦,通常使用序列( sequence )进行主键的管理。

sequence就是一组连续数字的集合:

每个数字只能使用一次
sequence使用前必须初始化

2.2 序列的创建

  • 语法:
create sequence 序列名minvalue 1		--sequence的最小值maxvalue 10000	--sequence的最大值start with 1	--sequence的起始值increment by 1	--sequence的步进值cache 20		--缓存数字个数
;

2.3 常用方法

  • nextval:选取sequence的下一个值

    也用来进行sequence的初始化,每调用1次,向前进步1

select 序列名.nextval from dual;
  • currval:选取sequence的当前值
select 序列名.currval from dual;

2.4 示例

  • 创建表
create table test1(id number(5) primary key,name varchar2(5)
);
  • 创建序列
create sequence test1_seqminvalue 1maxvalue 10000start with 1increment by 1
;
  • 初始化
select test1_seq.nextval from dual;
  • 插入数据
insert into test1 values(test1_seq.currval,'aa');--1号
insert into test1 values(test1_seq.nextval,'bb');--2号
insert into test1 values(test1_seq.nextval,'cc');--3号
commit;
insert into test1 values(test1_seq.nextval,'ee');--4号
insert into test1 values(test1_seq.nextval,'ff');--5号
rollback;
--每个序号只能使用一次,不会回退
insert into test1 values(test1_seq.nextval,'dd');--6号
insert into test1 values(test1_seq.nextval,'ee');--7号
insert into test1 values(test1_seq.nextval,'ff');--8号

3 视图

3.1 概述

视图是基于一个表或多个表或视图的逻辑表,本身不包含数据,通过它可以对表里面的数据进行查询和修改(特指简单视图)。

视图是存储在数据字典里的一条select语句。

视图基于的表称为基表。

  • 视图的特点

视图可以当成表使用
内容由基表的内容来确定
必须有DBA权限才能创建视图

  • 视图的优点

将复杂的sql语句保存在数据库中,方便管理与调用
可以将一张表通过不同的视图,从逻辑上当成N张表使用
可以像对普通表赋对象权限一样,将对象权限交于某个用户

3.2 视图的分类

  • 简单视图

从单表中获取数据
可以实现增删改操作,去影响基表的数据

  • 复杂视图

从多表获取数据,包含函数、分组
不允许通过修改视图去影响基表的数据

3.3 视图的创建

创建视图必须拥有DBA权限

  • 语法:
create [or replace] [force|noforce] view 视图名 [alias,alias...]
as
subquery
[with check option [contraint constraint]]
[with read only]

or replace:若所创建的试图已经存在,ORACLE自动重建该视图
force:不管基表是否存在ORACLE都会自动创建该视图
noforce:只有基表都存在ORACLE才会创建该视图
alias:为视图产生的列定义的别名
subquery:一条完整的SELECT语句,可以在该语句中定义别名
with check option:插入或修改的数据行必须满足视图定义的约束
with read only:该视图上不能进行任何DML操作

3.3.1 简单视图的创建

--查询名字中含有A的员工信息
create view emp_A_in_name
as
select * from emp where ename like '%A%';
--视图的使用与普通表相同
--视图本身没有数据,数据来源于视图基于的表(基表)
select * from emp_A_in_name;
select * from emp_A_in_name where deptno=30;
--通过修改视图,修改基表的数据
update emp_A_in_name set sal=3000 where empno=7900;

3.3.2 复杂视图的创建

--查询各部门的人数、平均/最低/最高薪资、薪资综合
create view emp_dept_sal
as
select deptno,count(*) num,avg(sal) avg_sal,min(sal) min_sal,max(sal) max_sal,sum(sal) sum_sal
from emp group by deptno;

3.4 视图修改

create view dept_view
as
select deptno,dname,loc from dept;
create or replace view dept_view(部门号,部门名,地址)
as
select deptno,dname,loc from dept;
create view dept_view
as
select deptno "部门号",dname "部门名",loc "工作地点"
from dept;

3.5 视图删除

drop view dept_view;

4 索引

提高查询效率,但是DML操作效率下降,不适合用在经常更改的表中

索引可以有N个,但是列组合必须不一样

4.1 索引的使用原则

  1. 建立在WHERE子句经常引用的表列上
  2. 多表查询应该在连接列上建立索引
  3. 不要在小表上建立索引
  4. 在经常需要排序操作的列上建立索引,可以加快数据排序的速度
  5. 索引越多,DML操作的速度越慢,尤其会极大影响INSERT操作和DELETE操作的速度

4.2 索引的分类

  • 按照索引数据的存储方式:B树索引、反向索引、位图索引。
  • 按照索引列的个数:单列索引复合(组合)索引
  • 按照索引列值的惟一性:惟一索引、非惟一索。

4.3 索引的创建

  • 语法:create index 索引名 on 表名 (列名1,…,列名N);

4.3.1 单列索引

单列索引是基于单个列所建立的

create index emp_index on emp(job)

4.3.2 复合索引

复合索引是基于多个列所建立的

create index newemp_idx _2 on newemp (sal,comm);
可以使用函数或模糊查询创建索引
create index my_emp_index_ename on emp('%ename%')

4.3.3 B树索引

--在建立索引时,留下30%的空间 用作后续插入的预留
create index ind_ename on emp (ename) pctfree 30 tablespace my_file;

4.3.4 唯一索引

create unique index idx_test_uid on test_uid(name);

4.3.5 位图索引

针对于具有大量重复值的列

create bitmap index sex_bitmap_index on student(sex);

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

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

相关文章

Modbus 的一些理解

疑问:(使用的是Modbustcp)我在 Modbus slave 上面设置了slave地址为1,位置为40001的位置的值为1,40001这个位置上面的值是怎么存储的,存储在哪里的?他们是怎么进行交互的?在Modbus协…

【运动控制框架】WPF运动控制框架源码,可用于激光切割机,雕刻机,分板机,点胶机,插件机等设备,开箱即用

WPF运动控制框架源码,可用于激光切割机,雕刻机,分板机,点胶机,插件机等设备,考虑到各运动控制硬件不同,视觉应用功能(应用视觉软件)也不同,所以只开发各路径编…

RabbitMQ-日常运维命令

作者介绍:简历上没有一个精通的运维工程师。请点击上方的蓝色《运维小路》关注我,下面的思维导图也是预计更新的内容和当前进度(不定时更新)。中间件,我给它的定义就是为了实现某系业务功能依赖的软件,包括如下部分:Web服务器代理…

【Linux基础知识系列】第九十篇 - 使用awk进行文本处理

在Linux系统中,文本处理是一个常见的任务,尤其是在处理日志文件、配置文件和数据文件时。awk是一个功能强大的文本处理工具,广泛用于数据提取、分析和格式化。它不仅可以处理简单的文本文件,还可以处理复杂的结构化数据&#xff0…

第二十七天(数据结构:图)

图:是一种非线性结构形式化的描述: G{V,R}V:图中各个顶点元素(如果这个图代表的是地图,这个顶点就是各个点的地址)R:关系集合,图中顶点与顶点之间的关系(如果是地图,这个关系集合可能就代表的是各个地点之间的距离)在顶点与顶点…

数据赋能(386)——数据挖掘——迭代过程

概述重要性如下:提升挖掘效果:迭代过程能不断优化数据挖掘模型,提高挖掘结果的准确性和有效性,从而更好地满足业务需求。适应复杂数据:数据往往具有复杂性和多样性,通过迭代可以逐步探索和适应数据的特点&a…

什么是键值缓存?让 LLM 闪电般快速

一、为什么 LLMs 需要 KV 缓存?大语言模型(LLMs)的文本生成遵循 “自回归” 模式 —— 每次仅输出一个 token(如词语、字符或子词),再将该 token 与历史序列拼接,作为下一轮输入,直到…

16.Home-懒加载指令优化

问题1:逻辑书写位置不合理问题2:重复监听问题已经加载完毕但是还在监听

Day116 若依融合mqtt

MQTT 1.MQTT协议概述MQTT是一种基于发布/订阅模式的轻量级消息传输协议,设计用于低带宽、高延迟或不稳定的网络环境,广泛应用于物联网领域1.1 MQTT协议的应用场景1.智能家居、车联网、工业物联网:MQTT可以用于连接各种家电设备和传感器&#…

PyTorch + PaddlePaddle 语音识别

PyTorch PaddlePaddle 语音识别 目录 概述环境配置基础理论数据预处理模型架构设计完整实现案例模型训练与评估推理与部署性能优化技巧总结 语音识别(ASR, Automatic Speech Recognition)是将音频信号转换为文本的技术。结合PyTorch和PaddlePaddle的…

施耐德 Easy Altivar ATV310 变频器:高效电机控制的理想选择(含快速调试步骤及常见故障代码)

施耐德 Easy Altivar ATV310 变频器:高效电机控制的理想选择(含快速调试步骤)在工业自动化领域,变频器作为电机控制的核心设备,其性能与可靠性直接影响整个生产系统的效率。施耐德电气推出的 Easy Altivar ATV310 变频…

搭建邮件服务器概述

一、电子邮件应用解析标准邮件服务器(qq邮箱):1)提供电子邮箱(lvbuqq.com)及存储空间2)为客户端向外发送邮件给其他邮箱(diaochan163.com)3)接收/投递其他邮箱…

day28-NFS

1.每日复盘与今日内容1.1复盘Rsync:本地模式、远程模式🍟🍟🍟🍟🍟、远程守护模式🍟🍟🍟🍟🍟安装、配置Rsync启动、测试服务备份案例1.2今日内容NFS优缺点NFS服…

二叉搜索树--通往高阶数据结构的基石

目录 前言: 1、二叉搜索树的概念 2、二叉搜索树性能分析 3、二叉搜索树的实现 BinarySelectTree.h test.cpp 4、key 和 key / value( map 和 set 的铺垫 ) 前言: 又回到数据结构了,这次我们将要学习一些复杂的…

Profinet转Ethernet IP网关接入五轴车床上下料机械手控制系统的配置实例

本案例为西门子1200PLC借助PROFINET转EtherNet/IP网关与搬运机器人进行连接的配置案例。所需设备包括:西门子1200PLC、Profinet转EtherNet/IP网关以及发那科(Fanuc)机器人。开启在工业自动化控制领域广泛应用、功能强大且专业的西门子博图配置…

专题二_滑动窗口_长度最小的子数组

引入:滑动窗口首先,这是滑动窗口的第一道题,所以简短的说一下滑动窗口的思路:当我们题目要求找一个满足要求的区间的时候,且这个区间的left和right指针,都只需要同向移动的时候,就可以使用滑动窗…

解锁高效开发:AWS 前端 Web 与移动应用解决方案详解

告别繁杂的部署与运维,AWS 让前端开发者的精力真正聚焦于创造卓越用户体验。在当今快速迭代的数字环境中,Web 与移动应用已成为企业与用户交互的核心。然而,前端开发者常常面临诸多挑战:用户认证的复杂性、后端 API 的集成难题、跨…

北京JAVA基础面试30天打卡04

1. 单例模式的实现方式及线程安全 单例模式(Singleton Pattern)确保一个类只有一个实例,并提供一个全局访问点。以下是常见的单例模式实现方式,以及如何保证线程安全: 单例模式的实现方式饿汉式(Eager Init…

Redis 缓存三大核心问题:穿透、击穿与雪崩的深度解析

引言在现代互联网架构中,缓存是提升系统性能、降低数据库压力的核心手段之一。而 Redis 作为高性能的内存数据库,凭借其丰富的数据结构、灵活的配置选项以及高效的网络模型,已经成为缓存领域的首选工具。本文将从 Redis 的基本原理出发&#…

耘瞳科技国产化点云处理软件,开启智能化三维测量新时代

在现代工业制造领域,三维点云数据已成为推动生产效率提升、质量控制优化以及智能制造转型的关键技术之一。三维点云数据能够提供高精度的物体表面信息,广泛应用于制造零件的质量检测;通过点云数据与CAD模型的对比分析,可以快速检测…