ORACLE進階操作

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模型的對比分析,可以快速檢測…