概念
1.使用者定義的一組完成特定操作的資料的集合。
2.是不可再分的工作單元,通常乙個事務對應乙個完整的業務。
3.資料只和增刪改有關。
特性acid
1.原子性a:乙個事務要麼全成功,要麼全失敗。
2.一致性c:事務從乙個一致的狀態,到另乙個一致的狀態。
3.隔離性i:不同事物併發進行,互不干擾。
4.永續性d:資料一旦改變,其變化是永久的儲存在資料庫中。
mysql事務提交模式
1.預設是自動提交
2.手動提交
事務的開啟和結束
1.start transaction任何dml語句都標誌著事務的開啟
2.end transcation提交事務或者回滾事務
事務與資料庫底層資料的互動
事務的併發
1.讀取髒資料:事務1讀取事務2更新的資料,2做了回滾。
2.不可重複讀:事務1需要多次讀取同一資料,事務2在1讀取資料的時候更改看資料,導致1讀取的同一資料前後不一致。
3.幻讀:管理員1已經將資料從數值改為相應等級,管理員2又插入數值資料,就像出現幻覺。
事務的四種隔離級別
1.未提交讀(髒讀):事務1與2都能讀到資料a,當事務1修改了資料a還未提交的時候,事務2也能讀到修改的資料。
2.提交讀:不會髒讀,事務1讀資料並修改,事務2讀同一資料,事務1提交之前,事務2讀的是原始資料。提交之後,看到的是信資料。即兩次讀的資料不一致。
3.可重複讀:兩者互不影響。
4.可序列化:事務2的執行必須在事務1執行結束之後。
use employeemanager
-- 建立觸發器 tr_employee_insert當新員工入職的時候,數值更新
create
trigger tr_employee_insert
after
insert
on employee
for each row
begin
-- 修改實際人數和實際名額
update dept set actualnum=actualnum+
1where did=new.did;
update dept set remaindernum=remaindernum-
1where did=new.did;
end-- 測試
select
*from employee;
use studentmanager;
-- 事務
-- 建立賬戶表
create
table
ifnot
exists account(
id int(11
)not
null
auto_increment
primary
key,
username varchar(50
)not
null
, money decimal(9
,2))
engine
=innodb
-- 插入資料
insert
into account(username,money)
values
('tom'
,1000);
insert
into account(username,money)
values
('jack'
,200);
-- 模擬事務的回滾和提交操縱
-- 關閉自動提交模式
set autocommit=0;
-- set autocommit=1;
-- 開始事務
start
transaction
;update account set money=money-
500where username=
'tom'
;update account set money=money+
500where username=
'jack'
;-- 假設轉賬過程出現異常,執行回滾操作
-- rollback;
-- 假設轉賬過程沒有異常,執行提交
commit
;select
*from account;
-- 檢視mysql的事務隔離級別:可重複讀
select @@tx_isolation
;-- 設定mysql的隔離級別,讀未提交
setsession
transaction
isolation
level
read
uncommitted
;-- 客戶端1
-- 開始事務
start
transaction
;select
*from account;
-- 客戶端2
start
transaction
;update account set money=money-
100where id=
1;
許可權控制use mysql;
-- 建立使用者
select
*from
user
;-- 建立使用者 create user '使用者名稱'@'主機名'identified by '密碼'
create
user user1@'localhost' identified by '
1234
';-- 執行flush命令使得使用者生效,重新整理許可權
flush privileges;
-- 建立使用者,允許任何ip都可以登入mysql資料庫
create user user2@'
%' identified by '
123456
';-- 使用drop user 刪除使用者
drop user user2@'%';
-- 使用delete刪除使用者
delete from user where host='localhost' and user='user1';
-- 修改密碼
update user set password=password('
123456
') where user='user1' and host='localhost';
-- 檢視使用者許可權 show grants for 使用者名稱
show grants for user1@localhost;
-- 給使用者授權 grant 許可權1....許可權n on 資料庫 表 to 使用者名稱;
grant select,update on bigdata.* to user1@'localhost';
flush privileges;
grant select,update on bigdata.test to user1@'localhost';
flush privileges;
grant select,update on *.* to user1@'localhost';
flush privileges
;-- 擁有最高許可權
grant
allon bigdata.
*to user2@localhost
;flush privileges
;-- 收回許可權 revokw 許可權1....許可權n on 資料庫 表 from 使用者名稱;
Mysql資料庫之事務
1.事務 乙個或多個sql語句組成乙個執行單元,這個執行單元要麼全部執行,要麼全部不執行。2.事務特性 1 原子性 乙個事務不可再分,要麼都執行,要麼都不執行。2 一致性 乙個事務的執行會使資料從乙個一致性狀態轉換到另乙個一致性狀態。3 隔離性 乙個事務的執行不受其他同步事務執行的影響。4 永續性 ...
MySQL資料庫之事務
1.sql標準的acid的定義 2.innodb的acid實現 innodb儲存引擎的原子性a和永續性d主要是通過redo重做日誌來實現的,資料一致性除了redo日誌外,需要undo日誌來輔助實現,即當事務提交失敗時,通過undo日誌來實現回滾,取消該事務對資料庫的操作。隔離性i主要是通過鎖和mvc...
資料庫之事務
事務是併發控制的單位,是使用者定義的乙個操作序列。這些操作要麼都做,要麼都不做,是個不可分割的工作單位。如果某一事務成功,則在該事務中進行的所有資料更改均會提交,成為資料庫中永久的組成部分。如果事務遇到錯誤,則必須取消或回滾,所有資料均被更改清除。1 原子性 atomicity 事務是資料庫的邏輯工...