事务
事务是数据库的最小逻辑单元,就是数据库中的一个最小的操作单位。
事务是由多条SQL语句组成的一个集合,有事务统一控制这些SQL语句的执行。
事务的属性
被简称为ACID属性, 是4个属性单词的首字母
![](https://i-blog.csdnimg.cn/direct/4308cfc44bd94a9a825666a6bbbefefc.png)
![](https://i-blog.csdnimg.cn/direct/c1906cbef77b4f96badaf7c5e934d831.png)
脏读,幻读,不可重复读
是三种常见的并发问题,通常与事务的隔离性(Isolation)有关
![](https://i-blog.csdnimg.cn/direct/fbb48ff201e04ec5b19b8a3d5818a2ea.png)
![](https://i-blog.csdnimg.cn/direct/71497d1ddf6a49f49d7ae67052ea3f29.png)
![](https://i-blog.csdnimg.cn/direct/123602edd9154228aeb25f5bb098796d.png)
事务锁
锁是一种用于管理并发事务访问共享数据的一种机制。为了保护数据的完整性和一致性,
防止多个事务在同一时间对同一数据进行冲突操作。
并发事务:同一时间内同时执行多个事务
共享锁:主要针对select查询语句,多个事务同时对同一张表进行查询时,这个表的数据是可以共享给多张表进行查询, 在oracle中通过FOR SHARE
子句来显式地获取共享锁
示例
![](https://i-blog.csdnimg.cn/direct/1cbca565d421471796fc9a3cd9a9c3a0.png)
独占锁:主要针对DML语句,多个事务同时对同一张表的同一条数据进行DML操作时,同一时间内只能有一个事务对这条数据进行DML操作,此时这条数据被该事务独占了,其它事务必须等待当前事务提交或回滚之后才能操作这条数据, 在Oracle中,独占锁通常在执行DML操作时自动获取
示例
![](https://i-blog.csdnimg.cn/direct/03e259745ace4fedb57047d29c6a935f.png)
事务的操作
![](https://i-blog.csdnimg.cn/direct/10013c60416348d2ad6a24f2bacb33fe.png)
示例
![](https://i-blog.csdnimg.cn/direct/01dcf1638dc446ae954501eaa60d4371.png)
在这个示例中,我们首先将员工ID为1的薪水更新为5000,然后设置一个保存点 before_second_update
。接着,我们将薪水再次更新为6000,但随后我们回滚到保存点 before_second_update
,这意味着薪水将恢复到5000。最后,我们提交事务,确保所有更改(即薪水更新为5000)被保存到数据库中
视图
一般视图 VIEW
![](https://i-blog.csdnimg.cn/direct/c1a75c067dc24317b226557df6af252c.png)
视图命名规则
![](https://i-blog.csdnimg.cn/direct/8cb64b3ddbae4dfc83d2a308efaf9edb.png)
视图命名常用v_开头
特点
![](https://i-blog.csdnimg.cn/direct/ebb604b0408e4f10bcc2a90a2600404a.png)
创建视图示例 :
创建一个emp表的视图, sal
(薪水)和 comm
(佣金)字段属于敏感字段,可能意味着这些字段在视图中被省略了,以保护敏感信息
![](https://i-blog.csdnimg.cn/direct/b42667c65e0a4bdfb37aad1000b800bb.png)
查询视图示例
![](https://i-blog.csdnimg.cn/direct/209c88d441e448088a2c796c98920bd0.png)
查看当前用户的所有视图
![](https://i-blog.csdnimg.cn/direct/0f81e3ea027a482c922c63b28fb25ffd.png)
查看数据库是所有视图
![](https://i-blog.csdnimg.cn/direct/ec2615a5b3b7431ca2862dedc8fee8d8.png)
查看数据库的所有视图,包括系统视图(需要DBA权限)
![](https://i-blog.csdnimg.cn/direct/cd7a2b6928f54f2fac7ab00560e4b35b.png)
查看特定视图的定义
![](https://i-blog.csdnimg.cn/direct/7edbaa2867aa4116bd09895340371293.png)
删除视图
数据安全性:删除视图并不会影响基表中的数据,只会删除视图的定义
![](https://i-blog.csdnimg.cn/direct/5b3e2c9af8b748e08e26a7e3c315edc3.png)
如果视图上存在约束(如参照完整性约束),删除视图时需要使用 CASCADE CONSTRAINTS
选项,否则删除操作将失败
![](https://i-blog.csdnimg.cn/direct/2ebbd4969fd044fb8b18f4f1d23e4011.png)
物化视图 MATERIALIZED VIEW
特点:
1.也称为实体化视图,是一张实表,创建物化视图会额外生成一份查询结果的数据存在物化视图中
-
物化视图不支持DML操作,物化视图中数据的更新,会在创建物化视图的时候设置好. 比如:定时更新,手动更新
-
使用物化视图进行查询,可以提高查询效率;查询结果中的数据已经在视图中存好了,无需从头开始执行查询,直接将存好的数据取出来;
示例: 创建物化视图
![](https://i-blog.csdnimg.cn/direct/382e4c7d6db94b95864519c47374f734.png)
示例: 创建物化视图并设置定时更新
![](https://i-blog.csdnimg.cn/direct/54ffea136220498e81ee3f73a3e7fe21.png)
-
BUILD IMMEDIATE
:立即构建, 表示物化视图在创建时立即填充数据。 -
REFRESH COMPLETE
:刷新完成, 表示每次刷新时都会完全重新计算物化视图。 -
START WITH SYSDATE NEXT SYSDATE + 1
:表示物化视图将在创建时立即刷新,并且之后每天刷新一次。
示例: 创建物化视图并设置手动更新
![](https://i-blog.csdnimg.cn/direct/bcddde3cbeb346818d998abcde3adca4.png)
REFRESH COMPLETE ON DEMAND
:按需刷新完成, 表示物化视图仅在手动刷新时更新
示例:手动刷新物化视图
![](https://i-blog.csdnimg.cn/direct/25f1fa06c6aa47649df23189972f2cd3.png)
示例: 查看物化视图的刷新状态
![](https://i-blog.csdnimg.cn/direct/0012b5137fd5417fbb76b7d542637363.png)
示例: 修改物化视图的刷新计划
可以使用 DBMS_SCHEDULER
来设置定时任务
![](https://i-blog.csdnimg.cn/direct/486be85f030c4b3e8bde2415bab408aa.png)
-
DBMS_SCHEDULER.create_job:
- DBMS_SCHEDULER是 Oracle 提供的一个内置包,用于创建和管理调度作业。SCHEDULER调度
FREQ=DAILY
表示该作业每天执行一次, FREQ
代表 "Frequency",意为"频率"
使用 DBMS_JOB
设置定时任务
![](https://i-blog.csdnimg.cn/direct/8fa33b4ea0fe4efda7276208e7e9f82a.png)