oracle知识 续
oracle知识 续
数据库对象:
view - 视图
视图是基于表或另一个视图的逻辑表,一个视图并不包含真实的数据,它提供了另一个视角查看或改变表中到的数据。
视图是一个虚表,不是实际的物理存在,描述一个或多个表的子集合。
视图的好处:
1.隐藏数据,增强数据的安全性
2.可以将复杂的多表连接查询的结果构成一个简单的表结构提供给用户,减少数据的冗余,方便对数据操作
create view 视图的名字
as
select * from 表名;
sequence - 序列
在oracle中没有自增字段,用sequence可以实现序列的自增长。
Nextval伪列返回下一个可用的序列值
Currval伪列获得当前的序列值
CREATE SEQUENCE sequence
序列在下列情况下出现裂缝:
回滚
系统异常
多个表同时使用同一序列
index – 索引
1.一种独立于表的模式对象, 可以存储在与表不同的磁盘或表空间中
2.索引被删除或损坏, 不会对表产生影响, 其影响的只是查询的速度
3.索引一旦建立, Oracle 管理系统会对其进行自动维护, 而且由 Oracle 管理系统决定何时使用索引. 用户不用在查询语句中指定使用哪个索引
4.在删除一个表时, 所有基于该表的索引会自动被删除
5.通过指针加速 Oracle 服务器的查询速度
6.通过快速定位数据的方法,减少磁盘 I/O
7.索引查询是直接利用rowid更快速的定位目标数据
8.主键约束,唯一性约束(unique)都会自动创建唯一性索引
应该在这些列上创建索引,例如:
在经常需要搜索的列上,可以加快搜索的速度;
在作为主键的列上,强制该列的唯一性和组织表中数据的排列结构;
在经常用在连接的列上,这些列主要是一些外键,可以加快连接的速度;
在经常需要根据范围进行搜索的列上创建索引,因为索引已经排序,其指定的范围是连续的;
在经常需要排序的列上创建索引,因为索引已经排序,这样查询可以利用索引的排序,加快排序查询时间;
在经常使用在WHERE子句中的列上面创建索引,加快条件的判断速度。
function - 函数
procedure - 存储过程
存储过程(Stored Procedure)是一组为了完成特定功能的SQL语句集,经编译后存储在数据库中。用户通过指定存储过程的名字并给出参数(如果该存储过程带有参数)来执行它。
模块化,可重用,扩展性高
function - 函数 与 procedure - 存储过程 区别:
1) 标识符不同
2) 函数中一般不用变量形参,用函数名直接返回函数值;而过程如有返回值,则必须用变量形参返回。
3) 函数有类型,最终要将函数值传给函数值;过程无类型,不能给过程名赋值。
4) 函数在定义时一定要进行函数的类型说明,过程则不进行过程的类型说明
5) 调用方式不同。函数的调用出现在表达式中;过程调用则是用独立的过程调用语句来完成。
6) 函数运算只是为求得一个函数值;过程一般会被设计成若干个运算结果,完成一系列的数据处理,与计算无关的各种操作。
trigger - 触发器
定义的触发器在满足指定条件下,触发器里面定义的语句就会自动执行。
触发器的定义对象可以是表或视图 。 语句级触发器 和 行级触发器两种。
package - 包
package是用来封装过程,函数用的,一个package可以存放多个过程,函数。
job - 定时器
定时执行一些存储过程或者包体的功能。
需在job中设定执行的kais时间、间隔时间、执行对象。
游标(光标):
SQL的游标是一种临时的数据库对象,是sql的内存工作区。
声明游标,打开游标,提取数据,关闭游标
三大范式:
第一范式:确保每列的原子性. 如果每列(或者每个属性)都是不可再分的最小数据单元(也称为最小的原子单元),则满足第一范式. 例如:顾客表(姓名、编号、地址、……)其中"地址"列还可以细分为国家、省、市、区等。
第二范式:在第一范式的基础上更进一层,目标是确保表中的每列都和主键相关. 如果一个关系满足第一范式,并且除了主键以外的其它列,都依赖于该主键,则满足第二范式. 例如:订单表(订单编号、产品编号、定购日期、价格、……),"订单编号"为主键,"产品编号"和主键列没有直接的 关系,即"产品编号"列不依赖于主键列,应删除该列。
第三范式:在第二范式的基础上更进一层,目标是确保每列都和主键列直接相关,而不是间接相关. 如果一个关系满足第二范式,并且除了主键以外的其它列都不依赖于主键列,则满足第三范式. 为了理解第三范式,需要根据Armstrong公里之一定义传递依赖。假设A、B和C是关系R的三个属性,如果A¬〉B 且B¬〉C,则从这些函数依赖中,可以得出A¬〉C,如上所述,依赖A¬〉C是传递依赖。 例如:订单表(订单编号,定购日期,顾客编号,顾客姓名,……),初看该表没有问题,满足第二范式,每列都和 主键列"订单编号"相关,再细看你会发现"顾客姓名"和"顾客编号"相关,"顾客编号"和"订单编号"又相关,最后经过传 递依赖,"顾客姓名"也和"订单编号"相关。为了满足第三范式,应去掉"顾客姓名"列,放入客户表中。
事务的特征:
原子性 一致性 隔离性 持久性
(1) 原子性
事务的原子性指的是,事务中包含的程序作为数据库的逻辑工作单位,它所做的对数据修改操作要么全部执行,要么完全不执行。这种特性称为原子性。
假如用户在一个事务内完成了对数据库的更新,这时所有的更新对外部世界必须是可见的,或者完全没有更新。前者称事务已提交,后者称事务撤消(或流产)。DBMS必须确保由成功提交的事务完成的所有操纵在数据库内有完全的反映,而失败的事务对数据库完全没有影响。
(2) 一致性
事务的一致性指的是在一个事务执行之前和执行之后数据库都必须处于一致性状态。这种特性称为事务的一致性。假如数据库的状态满足所有的完整性约束,就说该数据库是一致的。
一致性处理数据库中对所有语义约束的保护。假如数据库的状态满足所有的完整性约束,就说该数据库是一致的。例如,当数据库处于一致性状态S1时,对数据库执行一个事务,在事务执行期间假定数据库的状态是不一致的,当事务执行结束时,数据库处在一致性状态S2。
(3) 隔离性
隔离性指并发的事务是相互隔离的。即一个事务内部的操作及正在操作的数据必须封锁起来,不被其它企图进行修改的事务看到。
分离性是DBMS针对并发事务间的冲突提供的安全保证。DBMS可以通过加锁在并发执行的事务间提供不同级别的分离。假如并发交叉执行的事务没有任何控制,操纵相同的共享对象的多个并发事务的执行可能引起异常情况。
(4)持久性
持久性意味着当系统或介质发生故障时,确保已提交事务的更新不能丢失。即一旦一个事务提交,DBMS保证它对数据库中数据的改变应该是永久性的,耐得住任何系统故障。持久性通过数据库备份和恢复来保证。
持久性意味着当系统或介质发生故障时,确保已提交事务的更新不能丢失。即对已提交事务的更新能恢复。一旦一个事务被提交,DBMS必须保证提供适当的冗余,使其耐得住系统的故障。所以,持久性主要在于DBMS的恢复性能。
提高SQL执行效率
SQL优化的原则是:将一次操作需要读取的BLOCK数减到最低,即在最短的时间达到最大的数据吞吐量。
1、查询尽量用确定的列名,少用*号
2、尽量少嵌套子查询,这种查询会消耗大量的CPU资源
3、避免使用耗费资源的操作
1、DISTINCT
2、UNION union all
3、ORDER BY
4、MINUS
4、选择最有效率的表名顺序,Oracle解析器对表解析从右到左,所以记录少的表放在右边
5、对于有比较多or运算的查询,建议分成多个查询,用union all联结起来
6、合理使用索引
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 零经验选手,Compose 一天开发一款小游戏!
· 通过 API 将Deepseek响应流式内容输出到前端
· 因为Apifox不支持离线,我果断选择了Apipost!