国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

【示例】MySQL-事務(wù)控制示例:賬戶轉(zhuǎn)賬-savepoint關(guān)鍵字

這篇具有很好參考價值的文章主要介紹了【示例】MySQL-事務(wù)控制示例:賬戶轉(zhuǎn)賬-savepoint關(guān)鍵字。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

前言

本文講述MySQL中的事務(wù),以賬戶轉(zhuǎn)賬為例,體會事務(wù)的概念,并講解事務(wù)相關(guān)的一個關(guān)鍵字用法:savepoint

示例

數(shù)據(jù)準(zhǔn)備

drop table if exists account;

create table account(
	id int primary key AUTO_INCREMENT comment 'ID',
	name varchar(10) comment '姓名',
	money double(10,2) comment '余額'
) comment '賬戶表';

insert into account(name, money) VALUES ('張三',2000), ('李四',2000);

未控制事務(wù) | 轉(zhuǎn)賬正常

-- 1. 查詢張三余額
select * from account where name = '張三';
-- 2. 張三的余額減少1000
update account set money = money - 1000 where name = '張三';
-- 3. 李四的余額增加1000
update account set money = money + 1000 where name = '李四';

所有SQL正常執(zhí)行,沒有出錯。結(jié)果就是:張三賬戶余額-1000;李四賬戶余額+1000

未控制事務(wù) | 異常情況

-- 1. 查詢張三余額
select * from account where name = '張三';
-- 2. 張三的余額減少1000
update account set money = money - 1000 where name = '張三';

-- 手動寫一行錯誤的SQL語句
select xxx xxx;

-- 3. 李四的余額增加1000
update account set money = money + 1000 where name = '李四';

只有前兩個SQL執(zhí)行了,第三個SQL沒有執(zhí)行,出現(xiàn)數(shù)據(jù)不一致了:張三的錢減少了,但是李四的錢沒有增加

控制事務(wù) | 示例

mysql> START TRANSACTION;													# 開啟事務(wù)
Query OK, 0 rows affected (0.00 sec)

mysql> select * from account where name = '張三';		  					   # 展示張三賬戶金額
+----+--------+---------+
| id | name   | money   |
+----+--------+---------+
|  1 | 張三   | 2000.00 |
+----+--------+---------+
1 row in set (0.00 sec)

mysql> update account set money = money - 1000 where name = '張三';			# 將張三賬戶金額減少1000
Query OK, 1 row affected (0.00 sec)
Rows matched: 1  Changed: 1  Warnings: 0

mysql> update account set money = money + 1000 where name = '李四';			# 將李四賬戶金額增加1000
Query OK, 1 row affected (0.00 sec)
Rows matched: 1  Changed: 1  Warnings: 0

mysql> select * from account where name = '張三';				# 查詢張三賬戶金額(在事務(wù)里看,金額確實少了。但是數(shù)據(jù)庫里面賬戶值還沒變)
+----+--------+---------+
| id | name   | money   |
+----+--------+---------+
|  1 | 張三   | 1000.00 |
+----+--------+---------+
1 row in set (0.00 sec)

mysql> COMMIT;									# 上述操作均成功,提交事務(wù),修改生效。若某一操作失敗,需要回滾,COMMIT改為ROLLBACK
Query OK, 0 rows affected (0.00 sec)

mysql> select * from account where name = '張三';
+----+--------+---------+
| id | name   | money   |
+----+--------+---------+
|  1 | 張三   | 1000.00 |
+----+--------+---------+
1 row in set (0.00 sec)

上述操作過程大致三個步驟:開啟事務(wù)、執(zhí)行一組SQL語句、提交或回滾事務(wù)。

事務(wù)開啟方式

針對開啟事務(wù)這一步,有如下幾種方式:

# 方式1:關(guān)閉隱式事務(wù)
SELECT @@autocommit;
SET @@autocommit = 0;

# 方式2:手動開啟事務(wù)
START TRANSACTION;

# 方式3:手動開啟事務(wù)-另一種
BEGIN;

針對提交或回滾事務(wù)這一步,是看上數(shù)SQL操作是否都成功。若都成功,則提交;若有失敗,則回滾,使數(shù)據(jù)恢復(fù)到修改前的狀態(tài):

COMMIT;   # 若SQL語句執(zhí)行正常,提交事務(wù)

ROLLBACK; # 若SQL語句有執(zhí)行異常,回滾事務(wù)

若是要用一個sql腳本來處理一組事務(wù),則應(yīng)該在提交或者回滾這一步加上判斷條件:

# 開始事務(wù)
BEGIN;

#執(zhí)行一組SQL
xxxxxx

# 提交或回滾
if(所有SQL執(zhí)行成功) THEN
	COMMIT;
ELSE
	ROLLBACK;
END IF;

復(fù)雜的事務(wù)處理過程,通??梢越柚谌焦ぞ?,例如腳本語言:Python、PHP等。

事務(wù)相關(guān)關(guān)鍵字 | savepoint

savepoint關(guān)鍵字可以使得回滾事務(wù)的時候只混滾部分代碼處理的結(jié)果。

如下,是關(guān)于savepoint的大概作用流程:文章來源地址http://www.zghlxwxcb.cn/news/detail-850107.html

# 開啟事務(wù)
xxx

# 一組SQL
xxx修改操作1
xxx修改操作2
SAVEPOINT change1;
xxx查詢操作1
xxx查詢操作2,出問題報錯了

# 因為修改操作都完成了,在查詢結(jié)果是否正確的時候出了錯誤,就可以通過這樣,只回滾change1到ROLLBACK TO change1之間的代碼
ROLLBACK TO change1;

# ROLLBACK如果不加TO,就會回滾到初始位置,不管是否有savepoint
# 若是不想要某個savepoint點,可以刪除
RELEASE SAVEPOINT change1;

到了這里,關(guān)于【示例】MySQL-事務(wù)控制示例:賬戶轉(zhuǎn)賬-savepoint關(guān)鍵字的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進(jìn)行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費用

相關(guān)文章

  • 【MySQL】事務(wù)之MVCC(多版本并發(fā)控制)

    【MySQL】事務(wù)之MVCC(多版本并發(fā)控制)

    讀-讀 :不存在任何問題,也不需要并發(fā)控制 讀-寫 :有線程安全問題,可能會造成事務(wù)隔離性問題,可能遇到臟讀,幻讀,不可重復(fù)讀 寫-寫 :有線程安全問題,可能會存在更新丟失問題,比如第一類更新丟失,第二類更新丟失 多版本并發(fā)控制 ( MVCC )是一種用來解決 讀

    2024年02月14日
    瀏覽(29)
  • 一個簡單的轉(zhuǎn)賬場景示例帶你了解并發(fā)安全?

    一個簡單的轉(zhuǎn)賬場景示例帶你了解并發(fā)安全?

    本文轉(zhuǎn)帳場景主要參考來自于極客時間 王老師的 《Java 并發(fā)編程實戰(zhàn)》 一個簡單的轉(zhuǎn)賬場景示例帶你了解并發(fā)安全? 例如如銀行業(yè)務(wù)里面的轉(zhuǎn)賬操作,賬戶 A 減少 100 元,賬戶 B 增加 100 元。 我們聲明了個賬戶類:Account,該類有一個成員變量余額:balance,還有一個用于轉(zhuǎn)賬

    2024年01月22日
    瀏覽(33)
  • MySQL的savepoint分析

    本文看下MySQL的savepoint相關(guān)內(nèi)容。 savepoint是事務(wù)中一個概念,允許在事務(wù)執(zhí)行的過程中暫存事務(wù)執(zhí)行到當(dāng)前所產(chǎn)生的修改,這樣當(dāng)我們需要回滾事務(wù)時就可以選擇回滾到某個保存點,而不用回滾整個事務(wù)。語法格式如下: 如下表: 接下來我們分別對id為1,2的word都拼加字符串

    2024年02月15日
    瀏覽(10)
  • 9、Flink四大基石之Checkpoint容錯機制詳解及示例(checkpoint配置、重啟策略、手動恢復(fù)checkpoint和savepoint)

    一、Flink 專欄 Flink 專欄系統(tǒng)介紹某一知識點,并輔以具體的示例進(jìn)行說明。 1、Flink 部署系列 本部分介紹Flink的部署、配置相關(guān)基礎(chǔ)內(nèi)容。 2、Flink基礎(chǔ)系列 本部分介紹Flink 的基礎(chǔ)部分,比如術(shù)語、架構(gòu)、編程模型、編程指南、基本的datastream api用法、四大基石等內(nèi)容。 3、

    2024年02月04日
    瀏覽(25)
  • ⑩⑧【MySQL】InnoDB架構(gòu)、事務(wù)原理、MVCC多版本并發(fā)控制

    ⑩⑧【MySQL】InnoDB架構(gòu)、事務(wù)原理、MVCC多版本并發(fā)控制

    個人簡介:Java領(lǐng)域新星創(chuàng)作者;阿里云技術(shù)博主、星級博主、專家博主;正在Java學(xué)習(xí)的路上摸爬滾打,記錄學(xué)習(xí)的過程~ 個人主頁:.29.的博客 學(xué)習(xí)社區(qū):進(jìn)去逛一逛~ InnoDB邏輯存儲結(jié)構(gòu) : ?? 表空間(idb文件) :一個MySQL實例可以對應(yīng)多個表空間,用于存儲記錄、索引等數(shù)

    2024年02月04日
    瀏覽(53)
  • 義烏購關(guān)鍵字搜索API接口技術(shù)詳解與代碼示例

    義烏購關(guān)鍵字搜索API接口技術(shù)詳解與代碼示例

    義烏購搜索API接口技術(shù)詳解與代碼示例 在電子商務(wù)蓬勃發(fā)展的今天,義烏購作為國內(nèi)知名的批發(fā)市場平臺,為廣大商家和消費者提供了豐富的商品資源。為了方便開發(fā)者快速接入義烏購平臺,實現(xiàn)商品信息的搜索與獲取,義烏購開放了搜索API接口。本文將詳細(xì)介

    2024年03月17日
    瀏覽(33)
  • Go,從命名開始!Go的關(guān)鍵字和標(biāo)識符全列表手冊和代碼示例!

    Go,從命名開始!Go的關(guān)鍵字和標(biāo)識符全列表手冊和代碼示例!

    關(guān)注TechLeadCloud,分享互聯(lián)網(wǎng)架構(gòu)、云服務(wù)技術(shù)的全維度知識。作者擁有10+年互聯(lián)網(wǎng)服務(wù)架構(gòu)、AI產(chǎn)品研發(fā)經(jīng)驗、團(tuán)隊管理經(jīng)驗,同濟(jì)本復(fù)旦碩,復(fù)旦機器人智能實驗室成員,阿里云認(rèn)證的資深架構(gòu)師,項目管理專業(yè)人士,上億營收AI產(chǎn)品研發(fā)負(fù)責(zé)人。 (Keywords)是編程

    2024年02月10日
    瀏覽(103)
  • 關(guān)于c++中mutable、const、volatile這三個關(guān)鍵字及對應(yīng)c++與匯編示例源碼

    這哥三之間的關(guān)系是有趣的,不妨看看這個: cv (const and volatile) type qualifiers - cppreference.com permits modification of the class member declared mutable even if the containing object is declared const. 即便一個對象是const的,它內(nèi)部的成員變量如果被mutable修飾,則此成員變量依舊可以被修改。 很常見,

    2024年02月13日
    瀏覽(63)
  • 第二十七章 控制到 XML 模式的映射 - 影響架構(gòu)的編譯器關(guān)鍵字

    VALUELLIST 向類型添加 enumeration 限制??紤]下面的類: 下面顯示了該類的架構(gòu): XMLFractionDigits 適用于 %Numeric 。此參數(shù)對應(yīng)于 fractionDigits 構(gòu)面,如以下片段所示: XMLTotalDigits 適用于 %Numeric 屬性或 %Integer 屬性。此參數(shù)對應(yīng)于 totalDigits 方面,如以下片段所示: XMLLISTPARAMETER 適用

    2024年02月04日
    瀏覽(21)
  • Win10關(guān)于debug時windows用戶賬戶控制EnableLUAC

    Win10關(guān)于debug時windows用戶賬戶控制EnableLUAC

    目錄 Win10關(guān)于debug時windows用戶賬戶控制EnableLUAC 1、debug時,需要UAC獨立使能的附加條件配置 1.1、用戶帳戶控制: 以管理員批準(zhǔn)模式運行所有管理員? 1.2、?此時光有以下配置是不夠的,必須有上述配置 2、delphi或C++ Builder項目配置文件Manifest? 2.1、項目配置如下: 2.2、否則項目

    2024年02月05日
    瀏覽(18)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包