Mysql資料庫 事務和儲存引擎

2022-09-09 11:21:11 字數 3910 閱讀 3832

總的來說,事務就是是乙個操作序列,這些操作要麼都執行,要麼都不執行,它是乙個不可分割的工作單位。

acid,是指在可靠資料庫管理系統(dbms)中,事務(transaction)應該具有的四個特性:原子性(atomicity)、一致性(consistency)、隔離性(isolation)、永續性(durability)。這是可靠資料庫所應具備的幾個特性。

1.原子性

指事務是乙個不可再分割的工作單位,事務中的操作要麼都發生,要麼都不發生。

2.一致性

指在事務開始之前和事務結束以後,資料庫的完整性約束沒有被破壞。

3.隔離性

指在併發環境中,當不同的事務同時操縱相同的資料時,每個事務都有各自的完整資料空間。

事務之間的相互影響分為幾種,分別為:

(1)髒讀:乙個事務讀取了另乙個事務未提交的資料,而這個資料是有可能回滾的。

(2)不可重複讀:乙個事務內兩個相同的查詢卻返回了不同資料。這是由於查詢時系統中其他事務修改的提交而引起的。

(3)幻讀:乙個事務對乙個表中的資料進行了修改,這種修改涉及到表中的全部資料行。同時,另乙個事務也修改這個表中的資料,這種修改是向表中插入一行新資料。那麼,操作前乙個事務的使用者會發現表中還有沒有修改的資料行,就好象發生了幻覺一樣。

(4)丟失更新:兩個事務同時讀取同一條記錄,a先修改記錄,b也修改記錄(b不知道a修改過),b提交資料後b的修改結果覆蓋了a的修改結果。

mysql 及事物隔離級別:

(1)read_uncommitted : 讀取尚未提交的資料 :不解決髒讀

(2)read_committed:讀取已經提交的資料 :可以解決髒讀

(3)repeatable_read:重讀讀取:可以解決髒讀 和 不可重複讀 —mysql預設的

(4)serializable:序列化:可以解決 髒讀 不可重複讀 和 虛讀—相當於鎖表

mysql預設的事務處理級別是 repeatable read ,而oracle和sql server是 read committed 。

事務隔離級別

髒讀不可重複讀

幻讀第一類丟失更新

第二類丟失更新

read uncommitted

允許允許

允許禁止

允許read committed

禁止允許

允許禁止

允許repeatable read

禁止禁止

允許禁止

禁止serializable

禁止禁止

禁止禁止

禁止查詢全域性事務隔離級別:

查詢會話事務隔離級別:

設定全域性事務隔離級別:

設定會話事務隔離級別:

4.永續性

指不管系統是否發生故障,事務處理的結果都是永久的

在事務管理中,原子性是基礎,隔離性是手段,一致性是目的,永續性是結果。

開啟

提交

; #禁止自動提交

2set autocommit=1

; #開啟自動提交,mysql預設為1

3set varivariables like '

autocommit

'; #檢視mysql中的autocommit值

靜態(固定長度)表

靜態表是預設的儲存格式。靜態表中的字段都是非可變字段,這樣每個記錄都是固定長度的,這種儲存方式的優點是儲存非常迅速,容易快取,出現故障容易恢復;缺點是占用的空間通常比動態表多。

動態表動態表包含可變字段,記錄不是固定長度的,這樣儲存的優點是占用空間較少,但是頻繁的更新、刪除記錄會產生碎片,需要定期執行 optimize table 語句或 myisamchk -r 命令來改善效能,並且出現故障的時候恢復相對比較困難。

壓縮表壓縮表由 myisamchk 工具建立,佔據非常小的空間,因為每條記錄都是被單獨壓縮的,所以只有非常小的訪問開支。

檢視系統支援的儲存引擎

檢視表使用的儲存引擎

1 show table status from 庫名 where name='

表名'\g

1

use 庫名;

2 show create table 表名;

修改儲存引擎

1

通過 alter table 修改23

use 庫名;

4 alter table 表名 engine=myisam;

1

通過修改 /etc/

my.cnf 配置檔案,指定預設儲存引擎並重啟服務

23 vim /etc/my.cnf

4......

5[mysqld]

6......

7default-storage-engine=innodb

1 systemctl restart mysql.service
注意:此方法只對修改了配置檔案並重啟mysql服務後新建立的表有效,已經存在的表不會有變更

1

通過 create table 建立表時指定儲存引擎23

use 庫名;

4 create table 表名(欄位1 資料型別,...) engine=myisam;

MySQL資料庫事務以及儲存引擎

儲存引擎 跨引擎事務 在 mysql 命令列的預設設定下,事務都是自動提交的,即執行 sql 語句後就會馬上執行 commit 操作。因此要顯式地開啟乙個事務務須使用命令begin或start transaction,或者執行命令set autocommit 0,用來禁止使用當前會話的自動提交。用 ...

Mysql資料庫儲存引擎

儲存引擎是什麼?mysql中的資料用各種不同的技術儲存在檔案 或者記憶體 中。這些技術中的每一種技術都使用不同的儲存機制 索引技巧 鎖定水平並且最終提供廣泛的不同的功能和能力。通過選擇不同的技術,你能夠獲得額外的速度或者功能,從而改善你的應用的整體功能。例如,如果你在研究大量的臨時資料,你也許需要使...

資料庫 mysql儲存引擎

mysql常用的四種引擎的介紹 1 myisam儲存引擎 不支援事務 也不支援外來鍵,優勢是訪問速度快,對事務完整性沒有要求或者以select,insert為主的應用基本上可以用這個引擎來建立表,適合寫多的情況。frm儲存當前資料表的結構,myd儲存當前表的資料,myi儲存當前資料表的索引 支援表級...