最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

 更新時間:2021年10月26日 11:33:24   作者:老鄭_  
本文將通過一個用戶賬戶金額更新的案例分析幾種數(shù)據(jù)更新的操作的優(yōu)劣,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下

本文將通過一個 用戶賬戶金額更新的案例 分析幾種數(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)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • MySQL索引失效十種場景與優(yōu)化方案

    MySQL索引失效十種場景與優(yōu)化方案

    這篇文章主要介紹了MySQL索引失效十種場景與優(yōu)化方案,文中有詳細(xì)的代碼示例供參考閱讀,感興趣的朋友可以看一下
    2023-05-05
  • 詳解MySQL中的字符集和排序規(guī)則

    詳解MySQL中的字符集和排序規(guī)則

    MySQL字符集用于定義數(shù)據(jù)庫中存儲的文本數(shù)據(jù)的編碼格式,而排序規(guī)則則用于確定如何對文本數(shù)據(jù)進(jìn)行排序和比較,本文將給大家講講MySQL中的字符集和排序規(guī)則,需要的朋友可以參考下
    2023-09-09
  • mysql把查詢結(jié)果按逗號分割的實現(xiàn)示例

    mysql把查詢結(jié)果按逗號分割的實現(xiàn)示例

    使用MySQL數(shù)據(jù)庫的GROUP_CONCAT函數(shù),可以將查詢結(jié)果按逗號或其他指定分隔符連接成字符串,這種方法適用于需要匯總數(shù)據(jù)并以字符串形式展示的場景,本文介紹了GROUP_CONCAT函數(shù)的基本用法和注意事項,感興趣的可以了解一下
    2024-09-09
  • 教你如何在Mac上安裝mysql數(shù)據(jù)庫

    教你如何在Mac上安裝mysql數(shù)據(jù)庫

    本文給大家詳細(xì)介紹了如何在Mac上安裝mysql數(shù)據(jù)庫的方法,非常的細(xì)致,有需要的小伙伴可以參考下
    2018-05-05
  • 實現(xiàn)數(shù)據(jù)庫水平切分的兩個思路

    實現(xiàn)數(shù)據(jù)庫水平切分的兩個思路

    今天小編就為大家分享一篇關(guān)于實現(xiàn)數(shù)據(jù)庫水平切分的兩個思路,小編覺得內(nèi)容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧
    2019-03-03
  • MySQL如何解決幻讀問題

    MySQL如何解決幻讀問題

    在高并發(fā)數(shù)據(jù)庫系統(tǒng)中,需要保證事務(wù)與事務(wù)之間的隔離性,還有事務(wù)本身的一致性。所以需要解決幻讀問題,本文就來介紹一下,感興趣的可以了解一下
    2021-08-08
  • 基于mysq字段選擇的詳解

    基于mysq字段選擇的詳解

    本篇文章是對mysq字段選擇進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下
    2013-06-06
  • Mysql時間軸數(shù)據(jù) 獲取同一天數(shù)據(jù)的前三條

    Mysql時間軸數(shù)據(jù) 獲取同一天數(shù)據(jù)的前三條

    這篇文章主要介紹了Mysql時間軸數(shù)據(jù) 獲取同一天數(shù)據(jù)的前三條 ,本文通過實例代碼給大家介紹的非常詳細(xì),具有一定的參考借鑒價值,需要的朋友可以參考下
    2019-07-07
  • 一鍵安裝mysql5.7及密碼策略修改方法

    一鍵安裝mysql5.7及密碼策略修改方法

    這篇文章主要介紹了一鍵安裝mysql5.7及密碼策略修改方法,非常不錯,具有一定的參考借鑒價值,需要的朋友可以參考下
    2018-10-10
  • mysq啟動失敗問題及場景分析

    mysq啟動失敗問題及場景分析

    這篇文章主要介紹了mysq啟動失敗問題及解決方法,通過問題分析定位特殊場景解析給大家?guī)硗昝澜鉀Q方案,需要的朋友可以參考下
    2021-07-07

最新評論

苏州市| 丰宁| 吴江市| 江都市| 民丰县| 商河县| 湖口县| 庆安县| 湟中县| 沁源县| 博客| 屏南县| 广丰县| 汉中市| 连南| 仁怀市| 习水县| 利川市| 兴安县| 汉寿县| 桂东县| 大新县| 广河县| 建湖县| 繁峙县| 开化县| 永和县| 乌鲁木齐县| 绥滨县| 呼玛县| 顺昌县| 晋中市| 浦北县| 上饶市| 潢川县| 抚州市| 固始县| 电白县| 遂宁市| 松原市| 湟源县|