五月综合激情婷婷六月,日韩欧美国产一区不卡,他扒开我内裤强吻我下面视频 ,无套内射无矿码免费看黄,天天躁,日日躁,狠狠躁

新聞動態(tài)

MySQL幾種更新操作的案例分析

發(fā)布日期:2022-02-05 16:41 | 文章來源:腳本之家

本文將通過一個 用戶賬戶金額更新的案例 分析幾種數(shù)據(jù)更新的操作的優(yōu)劣。希望對大家有幫助 🐶。

數(shù)據(jù)庫版本 : mysql 5.7.23

案例分析

創(chuàng)建數(shù)據(jù)庫的DDL:

CREATE TABLE `hw_account` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(20) DEFAULT NULL,
  `balance` int(11) DEFAULT NULL,
  `status` varchar(20) DEFAULT NULL,
  `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP,
  `update_time` timestamp NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8mb4;

更新賬戶金額

直接更新

方案 1 查詢后更新

# 數(shù)據(jù)查詢
select * from hw_account where id = 1;
# 數(shù)據(jù)更新
update hw_account set balance = 5 where id = 1;

存在的問題,就是分兩次操作,如果并發(fā)執(zhí)行的時候,可能造成更新丟失的問題.

樂觀鎖方案

利用版本號操作,即對數(shù)據(jù)庫增加樂觀鎖的方式進(jìn)行。

# 數(shù)據(jù)查詢
select * from hw_account where id = 1;
# 數(shù)據(jù)更新
update hw_account set balance = 5 , version = version + 1 
  where id = 1 and version = n;
  
# 判斷是否成功  
if row < 1 {
   回滾
}

存在的問題,如果該條數(shù)據(jù)并發(fā)操作的時候,會導(dǎo)致其他的請求失敗。如果這個請求的前置鏈路比較長的話, 回滾成本比較高。

無鎖方案

不用查詢,采用數(shù)據(jù)庫的計算,也不需要版本號的操作,直接通過域值進(jìn)行有效性判斷。具體的 SQL 如下:

# 數(shù)據(jù)更新
update hw_account set balance = balance + @change_num , version = version + 1 
  where id = 1 and version = n;
  
# 判斷是否成功  
if row < 1 {
   回滾
}   

這種方案修改比較簡單, 但是依賴于數(shù)據(jù)計算,感覺不是特別友好。

排隊操作

通過 redis 或者 zk 的分布式鎖,進(jìn)行數(shù)據(jù)請求進(jìn)行排隊。然后在進(jìn)行數(shù)據(jù)更新。

# 偽代碼
if (獲取分布式鎖) {
  update hw_account set balance = @balance where id = 1;
} else {
  # 進(jìn)入等待,或者進(jìn)行自旋獲取鎖
}

常見問題

如果數(shù)據(jù)中存在 update_time 字段受影響的行數(shù)是多少?

update_time 的字段定義如下,如果數(shù)據(jù)為id = 1, status = 1 如果執(zhí)行更新數(shù)據(jù)的 sql 為

update hw_account set `status` = 1 where id = 1;

返回的受影響的行數(shù)為 0;

如果執(zhí)行 update 更新但受影響的行數(shù)為 0 會加行鎖嗎?

會的, 執(zhí)行更新的語句都會加行鎖(前提,事務(wù)內(nèi))

參考資料

mysql.com

到此這篇關(guān)于MySQL幾種更新操作的案例分析的文章就介紹到這了,更多相關(guān)MySQL 更新操作內(nèi)容請搜索本站以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持本站!

美國服務(wù)器租用

版權(quán)聲明:本站文章來源標(biāo)注為YINGSOO的內(nèi)容版權(quán)均為本站所有,歡迎引用、轉(zhuǎn)載,請保持原文完整并注明來源及原文鏈接。禁止復(fù)制或仿造本網(wǎng)站,禁止在非maisonbaluchon.cn所屬的服務(wù)器上建立鏡像,否則將依法追究法律責(zé)任。本站部分內(nèi)容來源于網(wǎng)友推薦、互聯(lián)網(wǎng)收集整理而來,僅供學(xué)習(xí)參考,不代表本站立場,如有內(nèi)容涉嫌侵權(quán),請聯(lián)系alex-e#qq.com處理。

實時開通

自選配置、實時開通

免備案

全球線路精選!

全天候客戶服務(wù)

7x24全年不間斷在線

專屬顧問服務(wù)

1對1客戶咨詢顧問

在線
客服

在線客服:7*24小時在線

客服
熱線

400-630-3752
7*24小時客服服務(wù)熱線

關(guān)注
微信

關(guān)注官方微信
頂部