MySQL 游標 變數 事務 鎖

2021-09-17 02:22:17 字數 2387 閱讀 4343

declare isend int default 0;

declare pid int;

declare num int;

declare cur cursor for select pid,sum(clicknum) from user; #定義游標

declare continue handler for not found set isend = 1; #游標結束時設為1

open cur;

fetch cur into pid,num;

while isend!=1 do

update user set click_num=num where prod_id=pid;

fetch cur into pid,num;

end while;

close cur;

1、手動開啟事務:start transaction;

2、提交:commit;

3、回滾:rollback;

##方法二:直接用 set 來改變 mysql 的自動提交模式

set autocommit=0 禁止自動提交

set autocommit=1 開啟自動提交

declare err int default 0;

declare continue handler for sqlexception set err = 1; #出錯時,游標設為1

start transaction;

#寫sql操作語句(增刪改)#

1、表級鎖:開銷小,加鎖快;不會出現死鎖;鎖定粒度大,發生鎖衝突的概率最高,併發度最低。

2、行級鎖:開銷大,加鎖慢;會出現死鎖;鎖定粒度小,發生鎖衝突的概率最低,併發度也最高。

3、頁面鎖:開銷和加鎖時間介於表鎖和行鎖之間;會出現死鎖;鎖定粒度介於表鎖和行鎖之間,併發處理能力一般。

1、無論哪種鎖,鎖了之後,當前會話都可以執行讀和寫操作
##實現方式一:顯式(很少用)

lock table *** read;(共享讀鎖)

lock table *** write;(獨佔寫鎖)

unlock tables; 解鎖、

##實現方式二:隱式(在事務中)

start transaction;

select * from student lock in share mode; //不存在索引條件 就是表讀鎖

##注意與上面的區別:

start transaction;

select * from student; //不存在lock in share mode,沒有鎖

1、innodb和myisam都支援表鎖

2、讀鎖:

只阻塞寫鎖、寫操作

不阻塞讀鎖、讀操作

3、寫鎖:

阻塞讀鎖、寫鎖、寫操作、讀操作

1、使用表鎖之後,不要使用事務,一旦使用事務,原本的表鎖會自動失效,這樣另外會話就不會阻塞

lock table *** read;

start transaction; //上面的鎖失效

2、一般如果想上面表鎖不失效,應該如下

start transaction;

lock table *** read;

1、關掉當前執行緒或連線

2、unlock tables

3、commit

共享鎖:select * from tb where id=4 lock in share mode 

排他鎖:select * from tb where id=4 for update

增刪改:

對於update、delete和insert語句,過濾條件無論帶不帶索引,innodb會自動給涉及資料表加排他鎖

對於update、delete如果不帶where索引條件,直接整張表加排它鎖,只可以讀

1、關掉當前執行緒或連線

mysql事務與鎖機制 mysql事務與鎖機制

在併發下事務會容易出現的一些問題 資料更新丟失 兩個事務同時操作一條資料,乙個事務因為異常導致資料更新丟失 髒讀 乙個失誤開始讀取了某行資料,另外乙個事務已經更新了此資料但沒有能夠及時提交。這是相當危險的,因為很可能所有的操作都被回滾。不可重複讀 乙個事務對同一行資料重複讀取兩次,但是卻得到了不同的...

九 SQL server 事務 鎖與游標問題

一 實驗目的 1 了解游標的基本作用,了解游標的種類 2.了解使用游標的方法,掌握使用游標的基本步驟 3.掌握事務和鎖的操作技巧。二 實驗內容 1 宣告乙個游標,用於查詢所有計算機專業的學生的學號 籍貫 和年齡 2 建立乙個事務l 3.實現乙個鎖 三 實驗步驟 1.宣告乙個游標,用於查詢所有計算機系...

mysql 事務和鎖

事務是dbms得執行單位 開啟事務 set autocommit 0 取消自動提交 或begin 手動開啟乙個事務 提交乙個事務 commit 回滾乙個事務 rollback 在mysql的innodb 引擎中,預設每個操作 insert,update,select for update lock ...