資料庫主要物件及事務
1、事務(Transaction)
事務是一組DML操作的邏輯單元,用來保證資料的一致
性。在一個事務內,組成事務的DML操作,或者一起
成功提交,或者一起撤銷。
commit:事務提交,將全部資料改動進行提交
rollback:事務回滾,回退到事務開始,資料的狀態
和事務開始之前一致
savepoint:事務儲存點
事務的開始和終止:
開始:事務開始於上一個事務的終止或者第一條
DML(insert/update/delete)語句
終止:事務終止於commit/rollback顯示操作(即控制檯
輸入commit/rollback)
如果連線關閉,事務將隱式提交
DDL操作,事務將隱式提交
如果出現異常情況(斷電、執行語句失敗),事務將
隱式回滾
事務中資料狀態:如果多個會話操作同一個表資料,
當使用者與伺服器連線成功後,伺服器將與客戶端建立
一個會話(Session),客戶端與oracle伺服器的互動
都是在此會話中進行的。
事務演示:
步驟1:
開啟會話A,建立表並插入一條資料,不提交
create table mytemp(id number(4));
insert into mytemp values(1);
步驟2:
開啟會話B,在會話A進行commit之前,會話B中只能查
看錶結構,檢視不到資料的
步驟3:
會話A中提交操作後,會話B中就可以檢視到資料
步驟4:
會話A中進行update操作,不要提交,會話B中看到的
是原來的資料
update mytemp set id=1001;
步驟5:
會話A提交後,會話B中看到資料修改的
步驟6:
會話A進行update操作沒有提交,會話B中進行delete
操作時被掛起,因為試圖操作相同的資料。
update mytemp set id=1234;
delete from mytemp;
步驟7:
會話A提交,會話B結束阻塞狀態,開始執行
步驟8:
會話A更新資料,之後回滾操作
update mytemp set id=4567;
rollback;
總結:
a.事務內部資料的改變(未提交)只有在自己的
會話中可以看到
b.事務會對操作的資料加鎖,不允許其他事務操作
c.如果提交操作,資料的改變得到確認,所有的會話
都能看到修改的資料;資料上鎖被釋放;儲存在臨時
空間裡面的資料也會被釋放
d.如果回滾操作,資料的修改被取消;資料上鎖被
釋放;臨時空間被釋放。
儲存點:可以回滾到指定的儲存點
儲存點演示:
drop table mytemp;
//建立表
create table mytemp(id number(4));
//事務開始
insert into mytemp values(3);
//設定儲存點
savepoint A;
insert into mytemp values(4);
savepoint B;
insert into mytemp values(5);
rollback to A;//回滾到儲存點A,A之後的儲存都被
取消
select * from mytemp;//3這個記錄插入資料庫
2、資料庫的主要物件
1)表(Table)
表是資料庫儲存的基本單位,在關係型資料庫中,表
是一個二維結構,由行和列組成,橫向為行也叫記錄,
縱向為列也叫欄位。
2)檢視(View)
檢視也稱虛表(虛擬表,沒有資料)。檢視對應於一條
SELECT語句,此語句得到的結果集被賦予一個名字,
即為檢視的名字。因此可以像操作表一樣操作檢視。
//查詢20部門的員工資訊
select empno,ename,position from emp_xu
where deptno=20;
//建立檢視
create view view_emp as
select empno,ename,position from emp_xu
where deptno=20;
//分配許可權
sqlplus /as sysdba 身份登入
grant create view to scott;//授予許可權
revoke create view from scott;//回收許可權
//scott身份登入
conn scott;
//檢視檢視
select * from view_emp;
檢視的使用和表相同的,檢視的好處,簡化查詢,隱藏
資料表中的列。檢視不包含任何資料的,檢視是基表
的資料投影。
//更新基表
更新員工表中1004員工的姓名'郭靖1'
update emp_xu set ename='郭靖1'
where empno=1004;
//更新檢視
更新檢視,將1004員工的姓名'郭靖'
update view_emp set ename='郭靖'
where empno=1004;
總結:
基表的DML操作會改變檢視的顯示結果,對檢視的DML
操作同樣會改變基表中的資料。檢視只是基表的
投影。
3)索引(Index)
索引是用來在資料庫中加速查詢的資料庫物件。通過
快速路徑訪問方式快速定位資料,可以較少的磁碟
I/O操作,提高訪問效能。
全盤掃描方式:查詢效率低
索引查詢:比全盤掃描快
索引結構:資料+地址 (如:張三+room202)
//空間換取時間,使用索引佔用空間,提高查詢效率
自動建立索引:如果資料表中PK/UK
兩種約束,索引會自動建立的,除此之外,需要手動
建立。
自定義索引語法:
create index 索引名 on 表名(列名);
//根據員工號1004找員工姓名
select ename from emp_xu
where empno=1004;
//檢視語句執行時間
set timing on;
//給員工表中員工號新增一個索引
create index index_empno on emp_xu(empno);
//新增索引之後查詢,由於資料量比較小,體現不明顯
4)序列(Sequence)
序列是一種用於生成唯一數字值的資料物件,序列的
值由oracle按遞增或遞減自動生成的,通常用來自動
生成表的主鍵值,是一種高效率獲取唯一主鍵值的
途徑。
特性:產生連續的不同數字值,是資料庫中獨立的物件,
表可以用序列產生的值作為主鍵值,也可以不用。
序列可以為一個表或多個表產生主鍵值,建議一個序列
為一個表產生主鍵值。
//產生從1開始的數字值,步進是1
create sequence first_sequence;
select first_sequence.nextval from dual;//下一個值
select first_sequence.currval from dual;//當前值
create sequence second_sequence
start with 100
increment by 10;//從100開始,以10遞增
select second_sequence.nextval from dual;//下一個值
select second_sequence.currval from dual;//當前值
create sequence third_sequence
start with 1000
maxvalue 1000
increment by -10;//1000開始,10遞減
select third_sequence.nextval from dual;//下一個值
select third_sequence.currval from dual;//當前值
//建立表
create table user_xu(
id number(4) primary key,
name varchar2(10) not null
);
//建立序列
create sequence user_sequence start with 1000;
//往表裡面放資料
insert into user_xu
values(user_sequence.nextval,'張三');
insert into user_xu
values(user_sequence.nextval,'李四');
//檢視錶資料
select * from user_xu;
使用序列插入資料時,有'延遲段'特性,跳過序列
的第一個值。
相關文章
- 資料庫索引、事務及儲存引擎 (續資料庫索引儲存引擎
- 資料庫事務整理資料庫
- C#資料庫事務原理及實踐(上)C#資料庫
- C#資料庫事務原理及實踐(下)C#資料庫
- 資料庫事務與 MySQL 事務總結資料庫MySql
- 資料庫映象和跨資料庫事務資料庫
- 淺談資料庫事務資料庫
- 說說資料庫事務資料庫
- 資料庫事務的特徵資料庫特徵
- 資料庫事務概論資料庫
- 資料庫事務 ACID資料庫
- 資料庫事務隔離資料庫
- 資料庫事務以及事務的四個特性資料庫
- 資料庫事務與事務的隔離級別資料庫
- MySQL之資料庫儲存引擎及事務ACID特性MySql資料庫儲存引擎
- 分散式事務之資料庫事務與JDBC事務實現(一)分散式資料庫JDBC
- Laravel 開啟資料庫事務Laravel資料庫
- 資料庫事務入門指南資料庫
- MySQL資料庫本地事務原理MySql資料庫
- 資料庫事務的隔離級別及四大特性資料庫
- JDBC、JDBC框架、資料庫事務、資料庫連線池JDBC框架資料庫
- 【MySQL】資料庫事務深入分析MySql資料庫
- [專業術語]資料庫事務資料庫
- 資料庫事務隔離級別資料庫
- SQL基礎-->資料庫事務(TRANSACTION)SQL資料庫
- 資料庫對比系列之三(PG事務與MySQL事務)資料庫MySql
- AlwaysOn 可用性組或資料庫映象不支援跨資料庫事務和分散式事務資料庫分散式
- 我的MySql事務處理(可以支援事務處理及資料庫路徑自己定義) (轉)MySql資料庫
- 用【庫存】看懂雲開發資料庫事務資料庫
- Springboot資料庫事務處理——Spring宣告式事務Spring Boot資料庫
- 暑期自學 Day 14 | 資料庫 (七)- 事務資料庫
- 資料庫事務與隔離級別資料庫
- 資料庫事務的方方面面資料庫
- 面試官:說說資料庫事務吧面試資料庫
- MySQL資料庫6:Go與MySQL事務MySql資料庫Go
- MySQL(一):MySQL資料庫事務與鎖MySql資料庫
- MCMySQL 資料庫 索引和事務ktkMySql資料庫索引
- 資料庫事務及其隔離級別資料庫