mysql資料庫學習筆記10-事務、檢視、索引
事務
============================================
*) 事務是資料操作的最小單元
*) 多個數據增刪改操作,完成的一項業務處理
*) 如果事務事務成功,其中每一項操作都生效
如果事務事務失敗,其中每一項操作都失敗
*) 資料庫資料操作,以事務為一個最小操作單元,
不應該以一個sql語句為一個操作單元;
要麼整個事務成功,要麼整個事務失敗
*) 事務的原子性
*) 在當前事務中對資料的修改,只對當前連線可見
*) ACID
------------
A - 原子性 Atomic
C - 一致性 Consistency
轉賬前 a+b = 100
轉帳後 a+b = 100
I - 隔離性 Isolation
一個事物進行中時,
另一事物不能操作資料
D - 永續性 Durancy
提交事務之後,
資料持久生效
*)事務操作
*)開始事務
start transaction;
set autocommit=0;
*)提交事務,事務結束
commit;
*)回滾事務,事務結束
rollback;
*) mysql 預設不開始事務,需要手動啟動事務
*)每一步資料修改都直接生效
*)檢視事務是否開啟
show variables like 'autocommit';
自動提交開啟,沒有事務
自動提交關閉,開始事務
*)innodb 提供行級鎖
一個事務修改一行資料未提交時,
該行資料會被鎖定,
不允許其他事務修改
*)事務隔離級別(針對的是事務之間的)
set tx_isolation='READ-UNCOMMITTED';
set tx_isolation='read-committed';
set tx_isolation='repeatable-read';
set tx_isolation='serializable';
1) 髒讀 READ-UNCOMMITTED 讀未提交資料
一個事務修改一半的資料
被其他事務讀取
2) 不允許髒讀 read-committed 讀提交資料
只能讀取其他事務已提交的資料
虛讀 update
幻讀 insert,delete
3) 可重複讀 (mysql 預設) repeatable-read
事務過程中,
前後讀取的資料一致,
即使過程中資料已被其他事務修改,
也讀取舊的資料
4) 序列化 serializable
所有事務排隊依次執行,
不能同時執行
*) 檢視隔離級別
show variables like 'tx%';
檢視 view
============================================
* 將一個查詢的查詢結果當做表
* 可以從這個虛擬的表查詢
drop view if exists v1;
create [or replace] view v1
as
selet ...;
* 檢視不是表,不儲存資料,
從檢視查詢時,
本質是從查詢結果再查詢(兩層查詢)
* 檢視檢視
show tables;
desc v1;
show create view v1;
* 為什麼使用檢視
*)檢視在大的專案中非常常用
*)簡化查詢
select
from
a join b .. join c...join d...join e...
select .. from v1;
*)安全
建立檢視給使用者訪問,
隱藏真實資料表
*)一般只從檢視查詢,不對檢視做增刪改操作
索引
==============================================
* 資料儲存位置目錄
*)雜湊索引
*)紅黑樹索引
* 提高查詢效率,首先考慮建立索引
* where name='abc'
name資料建立索引
* where name='abc' and birth='1993-5-3'
name和birth兩個欄位建立索引
對 where name='abc' 單欄位過濾也有效
但對 where birth='1993-5-3' 單欄位過濾無效
* 建立索引
create index index_name on tb1(name);
create index first_name_index
on employees(first_name);
create index job_dept_index
on employees(job_id, department_id);
資料備份和恢復
================================================
* 匯出庫表及資料
mysqldump -uroot -p
--default-character-set=utf8
庫名>/home/soft01/hr.sql
mysqldump -uroot -p --default-character-set=utf8 stu>/home/soft01/stu.sql
cat ~/stu.sql |more
* 將備份資料重新匯入資料庫
mysql -uroot -p --default-character-set=utf8
庫名<檔案路徑
mysql -uroot -p --default-character-set=utf8
stu2</home/soft01/stu.sql
drop database if exists jtds;
create database jtds charset=utf8;
將 jtds.sql 匯入 jtds 庫
limit
=================================================
* limit 5
前5條
* limit 0,10
從第一條開始的10條
* limit 10,10
從第十一條開始的10條
* limit 20,10
從第二十一條開始的10條
* 查詢第 page 頁,每頁10條
第一個引數: (page-1)*10
第二個引數: 10