事務
什麼是事務
- 事務(transaction)是作爲單個邏輯工作單元執行的一系列操作。
- 多個操作作爲一個整體向系統提交,要麼都執行、要麼都不執行。
- 事務是一個不可分割的工作邏輯單元。
- 事務主要用於處理操作量大,複雜度高的數據。
事務的特性
事務必須具備以下四個屬性,簡稱爲 ACID 屬性。
-原子性(Atomicity)
事務是一個完整的操作,事務的各步操作是不可分的(原子的),要麼都執行,要麼都不執行,不會結束在中間某個環節。事務在執行過程中發生錯誤,會被回滾(Rollback)到事務開始前的狀態 ,就像這個事務從來沒有執行過一樣。
-
一致性(Consistency)
當事務完成時,數據必須處於一致狀態。 -
隔離性(Isolation)
數據庫允許多個併發事務同時對數據進行讀寫和修改的能力,隔離性可以防止多個事務併發執行時由於交叉執行而導致數據的不一致。併發事務之間彼此隔離、獨立,它不應該以任何方式依賴於或影響其它事務。事務隔離分爲不同級別,包括讀未提交(Read uncommitted)、讀提交(read committed)、可重複讀(repeatable read)和串行化(Serializable)。 -
持久性(Durability)
事務完成後,它對數據庫的修改被永遠保持,即使系統故障也不會丟失。
在MySQL 命令行的默認設置下,事務都是自動提交的,即執行SQL語句後就會馬上
執行COMMIT操作。因此要顯式地開啓一個事務務必使用命令 BEGIN 或 START TRAN
SACTION,或者執行命令 SET AUTOCOMMIT=0,用來禁止使用當前會話地自動提交。
事務控制語句
- BEGIN 或 START TRANSACTION 顯示地開啓一個事務。
- COMMIT 也可以使用 COMMIT WORK,不過二者是等價的。COMMIT 會提交事務,並使已對數據庫進行的所有修改成爲永久性的。
- ROLLBACK 也可以使用 ROLLBACK WORK,不過二者是等價的。回滾會結束用戶的事務,並撤銷正在進行的所有未提交的修改。
- SAVEPOINT identifier,SAVEPOINT 允許在事務中創建一個保存點,一個事務中可以有多個 SAVEPOINT。
- RELEASE SAVEPOINT identifier 刪除一個事務的保存點,當沒有指定的保存點時,執行該語句會拋出一個異常。
- ROLLBACK TO identifier 把事務回滾到標記點。
- SET TRANSACTION 用來設置事務的隔離級別。InnoDB 存儲引擎提供事務的隔離級別有READ UNCOMMITTED、READ COMMITTED、REPEATABLE READ 和 SERIALIZABLE。
MySQL中支持事務的存儲引擎有InnoDB和BDB
MySQL事務處理主要有兩種方法
1.用BEGIN、ROLLBACK、COMMIT來實現
- BEGIN 開始一個事務
- ROLLBACK 事務回滾
- COMMIT 事務確認
2.直接用 SET 來改變MySQL 的自動提交模式
- SET AUTOCOMMIT=0 禁止自動提交
- SET AUTOCOMMIT=1 開啓自動提交
關閉自動提交後,從下一條SQL語句開始則開啓新事務,需使用COMMIT或ROLLBACK語句結束該事務
視圖
爲什麼需要視圖
- 不同的人員關注不同的數據
- 保證信息的安全性
什麼是視圖
-
視圖是一張 虛擬表
1.表示一張表的部分數據或多張表的綜合數據
2.其結構和數據是建立在對錶的查詢基礎上 -
視圖中不存放數據
1.數據存放在視圖所引用的原始表中 -
一個原始表,根據不同用戶的不同需求,可以創建不同的視圖
視圖的用途
- 篩選表中的行
- 防止未經許可的用戶訪問敏感數據
- 降低數據庫的複雜程度
- 將多個物理數據庫抽象爲一個邏輯數據庫
如何創建視圖
使用SQL語句創建視圖
CREATE VIEW view_name
AS
<SELECT 語句>;
使用SQL語句刪除視圖
DROP VIEW [IF EXISTS] view_name;
使用SQL語句查看視圖
SELECT 字段1,字段2,......FROM view_name;
使用視圖注意事項
- 視圖中可以使用多個表
- 一個視圖可以嵌套另一個視圖
- 對視圖數據進行添加、更新和刪除操作直接影響所引用表中的數據
- 當視圖數據來自多個表時,不允許添加和刪除數據
查看所有視圖
USE information_schema;
SELECT * FROM views\G;
使用視圖修改數據會有許多限制,一般在實際開發中視圖僅用作查詢
索引
什麼是索引
-
索引是一種有效組合數據的方式,爲快速查找到指定記錄
-
作用
1.大大提高數據庫的檢索速度
2.改善數據庫性能 -
MySQL索引按存儲類型分類
1.B-樹索引:InnoDB、MyISAM均支持
2.哈希索引
常用的索引類型
創建索引
CREATE [UNIQUE|FULLTEXT|SPATIAL] INDEX index_name
ON table_name(column_name[length]...);
刪除索引
DROP INDEX index_name
ON table_name
刪除表時,該表的所有索引同時會被刪除
創建索引的指導原則
-
按照下列標準選擇建立索引的列
1.頻繁搜索的列
2.經常用作查詢選擇的列
3.經常排序、分組的l列
4.經常用作連接的列(主鍵 / 外鍵) -
請不要使用下面的列創建索引
1.僅包含幾個不同值的列
2.表中僅包含幾行 -
經驗
1.查詢時減少使用 * 返回全部列,不要返回不需要的列
2.索引應該儘量小,在字節數小的列上建立索引
3.WHERE子句中有多個條件表達式時,包含索引列的表達式應置於其它表達式之前
4.避免在ORDER BY子句中使用表達式
查看索引
SHOW INDEX FROM table_name;
Table:創建索引的表
Non_unique:索引是否非唯一
Key_name:索引的名稱
Column_name:定義索引的列字段
Seq_in_index:該列在索引中的位置
Null:該列是否能爲空值
Index_type:索引類型
備份
使用mysqldump命令備份數據庫
mysqldump命令——MySQL一個常用的備份工具
- 將CREATE和INSERT INTO語句保存到文本文件
- 屬於DOS命令
mysqldump [options] -u userName -h host -p password
dbname[tbname1[,tbname2......]]>filename.sql
注意:mysqldump是DOS系統下的命令,在使用時無須進入mysql命令行,否則將無法執行
常用的參數選項
恢復數據庫
- 方法一:使用mysql命令恢復數據庫
mysql -u username -p password [dbname] <filename.sql
注意:
1.mysql爲DOS命令
2.在執行該語句之前,必須在MySQL服務器中創建新數據庫,如果不存在
,恢復數據庫過程將會報錯
- 方法二:使用source命令恢復數據庫
source filename;
注意:
1.登錄MySQL服務器後使用
2.執行該命令前,先創建並選擇恢復後的目標數據庫
導入 / 導出
導出
SELECT * FROM tablename
[WHERE contion]
INTO OUTFILE 'filename'[OPTION]
導入
LOAD DATA INFILE filename
INTO TABLE tablename[OPTION]
注意:
導入數據前應確保目標表已存在!