Mysql事物,許可權

2021-08-25 14:19:50 字數 2914 閱讀 6891

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 一致性 是指事物將資料庫從一種狀態變為另外一種狀態。在事物之前和事物之後,資料庫的完整性約束沒有被破...