事務-介紹與操作四大特性

一.數據準備:

1.員工表:

-- 員工管理
create table tb_emp
(id ? ? ? ? ?int unsigned primary key auto_increment comment 'ID',username ? ?varchar(20) ? ? ?not null unique comment '用戶名',password ? ?varchar(32) default '123456' comment '密碼',name ? ? ? ?varchar(10) ? ? ?not null comment '姓名',gender ? ? ?tinyint unsigned not null comment '性別, 說明: 1 男, 2 女',image ? ? ? varchar(300) comment '圖像',job ? ? ? ? tinyint unsigned comment '職位, 說明: 1 班主任,2 講師, 3 學工主管, 4 教研主管,5.咨詢師',entrydate ? date comment '入職時間',dept_id ? ? int unsigned comment '部門ID', -- 屬于外鍵字段,關聯部門表的主鍵IDcreate_time datetime ? ? ? ? not null comment '創建時間',update_time datetime ? ? ? ? not null comment '修改時間'
) comment '員工表';
?
insert into tb_emp
(id, username, password, name, gender, image, job, entrydate, dept_id, create_time, update_time)
values (1, 'jinyong', '123456', '金庸', 1, '1.jpg', 4, '2000-01-01', 2, now(), now()),(2, 'zhangwuji', '123456', '張無忌', 1, '2.jpg', 2, '2015-01-01', 2, now(), now()),(3, 'yangxiao', '123456', '楊逍', 1, '3.jpg', 2, '2008-05-01', 2, now(), now()),(4, 'weiyixiao', '123456', '韋一笑', 1, '4.jpg', 2, '2007-01-01', 2, now(), now()),(5, 'changyuchun', '123456', '常遇春', 1, '5.jpg', 2, '2012-12-05', 2, now(), now()),(6, 'xiaozhao', '123456', '小昭', 2, '6.jpg', 3, '2013-09-05', 1, now(), now()),(7, 'jixiaofu', '123456', '紀曉芙', 2, '7.jpg', 1, '2005-08-01', 1, now(), now()),(8, 'zhouzhiruo', '123456', '周芷若', 2, '8.jpg', 1, '2014-11-09', 1, now(), now()),(9, 'dingminjun', '123456', '丁敏君', 2, '9.jpg', 1, '2011-03-11', 1, now(), now()),(10, 'zhaomin', '123456', '趙敏', 2, '10.jpg', 1, '2013-09-05', 1, now(), now()),(11, 'luzhangke', '123456', '鹿杖客', 1, '11.jpg', 1, '2007-02-01', 3, now(), now()),(12, 'hebiweng', '123456', '鶴筆翁', 1, '12.jpg', 1, '2008-08-18', 3, now(), now()),(13, 'fangdongbai', '123456', '方東白', 1, '13.jpg', 2, '2012-11-01', 3, now(), now()),(14, 'zhangsanfeng', '123456', '張三豐', 1, '14.jpg', 2, '2002-08-01', 2, now(), now()),(15, 'yulianzhou', '123456', '俞蓮舟', 1, '15.jpg', 2, '2011-05-01', 2, now(), now()),(16, 'songyuanqiao', '123456', '宋遠橋', 1, '16.jpg', 2, '2010-01-01', 2, now(), now()),(17, 'chenyouliang', '123456', '陳友諒', 1, '17.jpg', NULL, '2015-03-21', NULL, now(), now());

2.部門表:

-- 部門管理
create table tb_dept
(id ? ? ? ? ?int unsigned primary key auto_increment comment '主鍵ID',name ? ? ? ?varchar(10) not null unique comment '部門名稱',create_time datetime ? ?not null comment '創建時間',update_time datetime ? ?not null comment '修改時間'
) comment '部門表';
?
insert into tb_dept (id, name, create_time, update_time)
values (1, '學工部', now(), now()),(2, '教研部', now(), now()),(3, '咨詢部', now(), now()),(4, '就業部', now(), now()),(5, '人事部', now(), now());


二.實例:

意味著要刪除部門表里的學工部和員工表里在學工部的員工。

代碼:
-- =============================================事務=============================================
-- 刪除部門
delete from tb_dept where id = 1;
?
?
-- 刪除部門下的員工
delete from tb_emp where dept_id = 1;
運行結果:

1.異常情況:

代碼:
-- =============================================事務=============================================
-- 刪除部門
delete from tb_dept where id = 3;
?
?
-- 刪除部門下的員工
delete from tb_emp where dept_id == 3;
運行結果:

出現了異常,只有部門表成功操作,員工表操作失敗:

2.問題:可通過事務解決


三.事務:

如果刪除一個部門,那么該部門下的員工也就要刪除,因此兩者應屬于一個事務即要么同時成功,要么同時失敗,但剛才的例子中刪除部門成功,而刪除部門對應的員工失敗,是因為當執行一條DML語句時,MySQL會立即隱式的提交事務,也就是說,剛才刪除部門的SQL語句和刪除員工的SQL語句是兩個事務。

由此,就需要把刪除部門和刪除部門下的員工綁定成一個事務。


四.操作:

首先開啟事務,所有操作成功之后提交事務,只要有數據操作失敗就需要回滾事務,回滾事務就是把所有的數據恢復到操作之前的樣子。

注:上圖3條語句都屬于SQL語句,都需要執行才生效。

如:


五.代碼演示事務:

-- =============================================事務=============================================
-- 1.開啟事務
start transaction ;/*也可以用begin*/
?
?
-- 刪除部門
delete from tb_dept where id = 3;
?
?
-- 刪除部門下的員工
delete from tb_emp where dept_id = 3;
?
?
?
-- 2.提交事務
commit ;
?
?
-- 3.回滾事務
rollback ;
?
?
select * from tb_dept;
select * from tb_emp;

1.部門表和員工表:

2.開啟事務并執行綁定為事務的SQL語句:

運行結果:帶綠箭頭的語句代表已經執行過

在別的窗口中此時id為3的部門和該部門下的員工并沒有被刪除,是因為還沒有提交事務,兩者還是隔離的(盡管刷新后看到的已經刪除了,但并沒有真正意義上的刪除,兩個窗口也屬于兩個事務)。

在開啟事務的窗口中查看部門表和員工表:同一個窗口下屬于一個事務,可以看到id為3的部門和該部門下的員工被刪除

3.提交事務:

此時別的窗口中就可以看到正確的結果了。

4.異常情況:

a.代碼:
-- =============================================事務=============================================
-- 1.開啟事務
start transaction ;/*也可以用begin*/
?
?
-- 刪除部門
delete from tb_dept where id = 2;
?
?
-- 刪除部門下的員工
delete from tb_emp where dept_id == 2;
?
?
?
-- 2.提交事務
commit ;
?
?
-- 3.回滾事務
rollback ;
?
?
select * from tb_dept;
select * from tb_emp;
b.開啟事務:

c.執行SQL語句:

2條SQL語句中只成功操作了部門表,員工表操作失敗。

先不提交事務,因為提交事務是所有操作成功后才進行的操作,如果有操作失敗,就必須先回滾事務

部門表和員工表的運行結果:部門表操作成功,員工表操作失敗

由此就需要回滾事務。

d.回滾事務(只要有操作失敗就要回滾事務):

部門表和員工表數據恢復到操作之前的樣子:

所以一旦出現異常,就可以通過回滾事務將刪除掉的數據恢復,從而保證在操作前后數據的一致性和完整性。


六.事務的四大特性:

1.一致性:無論提交事務還是回滾事務,都算事務完成,所有的數據都必須保持一致性。比如剛才的例子,事務完成后要么部門和該部門下的員工都還在,要么部門和該部門下的員工都沒有,不能是部門沒有了,而該部門下的員工還在。

2.隔離性:在一個窗口下還沒有提交事務,在另一個窗口下就無法看到最終結果,即使看到了,也不是正在意義上的。隔離性可以通過隔離級別來設置,隔離性越高,事務越安全,但效率越低,所以隔離性很少手動控制。


七.總結:


本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/63327.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/63327.shtml
英文地址,請注明出處:http://en.pswp.cn/web/63327.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Golang學習歷程【第一篇 入門】

Golang學習歷程【第一篇 入門Hello World】 1. 學習文檔2. Window 本地安裝Go2.1 安裝2.2 驗證 3. 開發環境——VsCode3.1 VsCode 安裝3.2 安裝插件3.2.1 language 語言漢化插件安裝3.2.2 Go插件安裝 4. Hello World 入門4.1 建工程4.2 創建項目文件4.3 編寫Hello World程序4.4…

微積分復習筆記 Calculus Volume 2 - 4.3 Separable Equations

4.3 Separable Equations - Calculus Volume 2 | OpenStax

Day43 動態規劃part10

300.最長遞增子序列 今天開始正式子序列系列,本題是比較簡單的,感受感受一下子序列題目的思路。 視頻講解:動態規劃之子序列問題,元素不連續!| LeetCode:300.最長遞增子序列_嗶哩嗶哩_bilibili 代碼隨想錄 class Solution {public int lengthOfLIS(int[] nums) {int[] …

Doris SQL 特技

group_concat description Syntax VARCHAR GROUP_CONCAT([DISTINCT] VARCHAR str[, VARCHAR sep] [ORDER BY { col_name | expr} [ASC | DESC]) 該函數是類似于 sum() 的聚合函數,group_concat 將結果集中的多行結果連接成一個字符串。第二個參數 sep 為字符串之…

Metaploit-永恒之藍漏洞利用

1:Metaploit介紹   本次測試主要是利用永恒之藍漏洞對windows7進行控制利用,掌握Metaploit工具的使用,知道永恒之藍的漏洞利用原理。永恒之藍是在Windows的SMB服務處理SMB v1請求時發生的漏洞,這個漏洞導致攻擊者在目標系統上可…

電容Q值、損耗角、應用

電容發熱的主要原因:紋波電壓 當電容兩端施加紋波電壓時,電容承受的是變化的電壓,由于電容內部存在寄生電阻(ESR)和寄生電感(ESL).因此電容會有能量損耗,從而產生熱量,這…

css三角形源碼

效果圖 如下圖所示&#xff0c;讓一個 div 變成三角形&#xff0c;并且可隨意更改大小&#xff0c; 本文提供了可運行示例源碼&#xff0c;直接復制即可。 實現源碼 建議創建一個 demo.html 文件&#xff0c;一鍵復制代碼運行。 <style> .div{width: 0px;height: 0p…

pyparsing restOfLine

在 pyparsing 中&#xff0c;restOfLine 是一個解析器&#xff08;parser&#xff09;&#xff0c;用于匹配當前位置到行尾的所有內容&#xff0c;通常在解析文件或處理逐行數據時非常有用。 restOfLine 的特性 匹配內容&#xff1a;從當前位置一直匹配到換行符 \n 或字符串結…

【附源碼】Electron Windows桌面壁紙開發中的 CommonJS 和 ES Module 引入問題以及 Webpack 如何處理這種兼容

背景 在嘗試讓 ChatGPT 自動開發一個桌面壁紙更改的功能時&#xff0c;發現引入了一個 wallpaper 庫&#xff0c;這個庫的入口文件是 index.js&#xff0c;但是 package.json 文件下的 type:"module"&#xff0c;這樣造成了無論你使用 import from 還是 require&…

【計算機網絡篇】計算機網絡期末復習題庫詳解

&#x1f9f8;安清h&#xff1a;個人主頁 &#x1f3a5;個人專欄&#xff1a;【計算機網絡】【Mybatis篇】 &#x1f6a6;作者簡介&#xff1a;一個有趣愛睡覺的intp&#xff0c;期待和更多人分享自己所學知識的真誠大學生。 目錄 &#x1f3af;單選 &#x1f3af;填空 &am…

JS使用random隨機數實現簡單的四則算數驗證

1.效果圖 2.代碼實現 index.html <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>Document</ti…

GIN中間件

感覺中間件是gin中挺重要的內容&#xff0c;就拿出來單獨講講吧&#xff01; 什么是中間件&#xff1f; Gin框架允許開發者在處理請求的過程中&#xff0c;加入用戶自己的 HandlerFunc 函數。 它適合處理一些公共的業務邏輯&#xff0c;比如登錄認證、權限校驗、數據分頁、記…

SLM510A系列——24V,15到150mA單通道可調電流線性恒流LED驅動芯片

SLM510A 系列產品是單通道、高精度、可調電流線性恒流源的 LED 驅動芯片&#xff0c;在各種 LED 照明產品中非常簡單易用。其在寬電壓輸入范圍內&#xff0c;能保證極高的輸出電流精度&#xff0c;從而在大面積的光源照明中&#xff0c;都能讓 LED 照明亮度保持均勻一致。 由于…

回歸預測 | MATLAB實現SVM-Adaboost集成學習結合支持向量機多輸入單輸出回歸預測

回歸預測 | MATLAB實現SVM-Adaboost集成學習結合支持向量機多輸入單輸出回歸預測 目錄 回歸預測 | MATLAB實現SVM-Adaboost集成學習結合支持向量機多輸入單輸出回歸預測基本介紹程序設計基本介紹 SVM-Adaboost集成學習是一種將支持向量機(SVM)與AdaBoost算法相結合的集成學習…

【潛意識Java】深度解讀JavaWeb開發在Java學習中的重要性

目錄 為什么Java Web開發如此重要&#xff1f; 1. 現代開發的核心技能 2. 增強系統設計與架構思維 3. 實戰經驗積累 Java Web開發的關鍵技術棧 案例&#xff1a;構建一個簡單的Java Web應用 1. 創建數據庫 2. 創建Java類 3. 創建數據庫連接工具類 4. 創建DAO類 5. 創…

如何在 .NET Core 中輕松實現異步編程并提升性能

目錄 初識異步編程 與多線程關系 異步編程操作 初識異步編程 異步編程&#xff1a;是指在執行某些任務時程序可以在等待某個操作完成的過程中繼續執行其他任務&#xff0c;而不是阻塞當前線程&#xff0c;這在處理I/O密集型操作(如文件讀取、數據庫查詢、網絡請求等)時尤為重…

麒麟操作系統服務架構保姆級教程(二)ssh遠程連接

如果你想擁有你從未擁有過的東西&#xff0c;那么你必須去做你從未做過的事情 作為一名成熟運維架構師&#xff0c;我們需要管理的服務器會達到幾十臺&#xff0c;上百臺&#xff0c;上千臺&#xff0c;甚至是上萬臺服務器&#xff0c;而且咱們的服務器還不一定都在一個機房&am…

159.等差數列的劃分

class Solution {public int numberOfArithmeticSlices(int[] nums) {int lenums.length;if(le<3){return 0;}int arith0,res0,count0;//arith是差的大小,res是結果,count計算等差數量for(int i1;i<le;i){if(nums[i]-nums[i-1]arith){count;if(count>2){rescount-1;}}…

RabbitMQ消息隊列的筆記

Rabbit與Java相結合 引入依賴 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-amqp</artifactId> </dependency> 在配置文件中編寫關于rabbitmq的配置 rabbitmq:host: 192.168.190.132 /…

請求三方http工具

請求三方接口工具封裝 實現邏輯&#xff1a; 發起請求&#xff0c;輸入基本請求信息&#xff1a;請求地址&#xff0c;請求類型&#xff0c;請求參數&#xff0c;是否需要認證工具自動為需要添加認證的請求添加認證&#xff0c;如果發現token快要過期或返回的錯誤編碼為定義的…