1. 事務
ddl create alter drop truncate
dml insert update delete select
tcl start transaction, commit, rollback
1) start transaction 開始事務 (begin)
2) commit 提交事務
3) rollback 回滾事務
賬戶表account
id balance(餘額)
1 50000.0
2 0.0
create table account (
id int primary key,
balance decimal(12,2) not null
); insert into account(id,balance)values(1,50000.0),(2,0.0);
以下兩條sql必須作為乙個整體執行, 要麼都成功,其中有一條失敗,前面成功的也得撤銷
update account set balance=balance+10000.0 where id=2; /*2號賬戶轉入10000元*/ 成功
update account set balance=balance-10000.0 where id=1; /*1號賬戶轉出10000元*/
所謂的事務,就是指乙個事務內,多條sql語句是作為乙個整體執行的。
乙個事務內的多條sql是作為乙個原子操作,不可以被分割。要麼都成功,要麼都不成功。
start transaction;
update
update
insert
delete
如果這個事務內多條sql全部成功 commit(讓更改都生效)
如果這個事務內有sql失敗了,rollback(讓更改都撤銷)
事務內所有更改,在結束之前,對於其它使用者來講都是不可見的。
事務commit提交時,這些更改才會真正生效,其它使用者才能看到你的更改。
事務執行中如果出現意外情況,這時候可以執行rollback,可以撤銷事務內所有更改,恢復到事務開始的時刻
commit 和rollback都意味著事務結束
事務有四大特性
acid
a 原子性, 指事務內多條sql是作為乙個整體執行
c 一致性, 事務開始前後,整個資料的狀態應當一致
i 隔離性, 指事務的隔離級別(未提交讀,提交讀,可重複讀,序列化讀)
1) 髒讀(讀取到了未提交的資料)
客戶1 客戶2
1 號賬戶餘額 10000.0
begin;
update 1 號賬戶餘額50000.0
select 1 號賬戶餘額 50000.0 髒讀
rollback;
select 1 號賬戶餘額 50000.0
2)避免髒讀現象, 將隔離級別公升級為提交讀
查詢到的肯定是別人提交後的結果,提交讀下不會有髒讀, 但會有不可重複讀現象:
客戶1 更新 客戶2查詢
1 號賬戶餘額 10000.0
begin;
select ... 10000.0
begin;
update 1 號賬戶餘額50000.0;
commit;
select ... 50000.0
commit;
3) 為了避免不可重複和髒讀的現象,可以將隔離級別公升級可重複讀(mysql預設隔離級別)
4) 幻讀 (可以將隔離級別提高為序列化讀,即可避免幻讀現象)
客戶1 新增 客戶2查詢
原始記錄是10條
begin begin;
查詢個數 10
insert 1
commit;
查詢個數 11
commit;
5) mysql的【可重複讀】隔離級別三種現象都可以避免
d 永續性, 事務中做的更改必須在事務結束後永久生效
增刪改查(insert update delete select)
crud c insert 插入
r select 查詢
u update 更新
d delete 刪除
2. dcl 資料控制語言 (了解)
grant 授權
revoke **許可權
create user 'user1'@'localhost' identified by 'user1';
登入之後執行use test3;
會報告 access denied for user 'user1' 含義是使用者無權訪問.
使用root 給user1授權
grant all on test3.* to 'user1'@'localhost';
all 是代表所有許可權:select,insert,update,delete...
test3.* 是許可權的範圍:test3庫中所有物件
to 後面跟的是使用者
使用root**許可權
revoke all on test3.* from 'user1'@'localhost';
更細的許可權分配
grant select on test3.student to 'user1'@'localhost'; /*只讓test1使用者能夠查詢test3.student表*/
關於mysql裡面的事物 mysql 事物
mysql之事物詳解 一 事務定義 事務 乙個最小的不可再分的工作單元 通常乙個事務對應乙個完整的業務 例如銀行賬戶轉賬業務,該業務就是乙個最小的工作單元 乙個完整的業務需要批量的dml insert update delete 語句共同聯合完成 事務只和dml語句有關,或者說dml語句才有事務。這...
MySQL 事物和事物回滾
原子性一致性隔離性永續性 事務應用 開啟事務 mysql begin mysql 一條或者多條sql命令 此時autocommint被禁用終止事務 mysql commit mysql rollback 注意 事務回滾只針對於表記錄的操作 增 刪 改有效 對建立庫 建立表的操作無效背景 你 建行卡 ...
MySQL事物系列 1 事物簡介
1 事物是一組sql的集合,要麼都執行,要麼都不執行。有acid4個特性,即 原子性 一致性 隔離性 永續性。a atomicity 原子性 整個事物是不可分割的工作單位。c consistency 一致性 是指事物將資料庫從一種狀態變為另外一種狀態。在事物之前和事物之後,資料庫的完整性約束沒有被破...