5、事務和limit補充

一、事務【都是重點】

1、了解

  • 一個事務其實就是一個完整的業務邏輯

  • 要么同時發生,要么同時結束

  • 是一個最小的工作單元

  • 不可再分

看這個視頻,黑馬的,4分鐘多點就能理解到

可以理解成:

開始事務-----如果中間拋出異常,進行回滾事務---->提交事務

2、事務的四大特性(ACID)

  • 1、原子性:事務是不可分割的最小操作單元,要么全部成功,要么全部失敗。

  • 2、一致性:事務完成時,必須使所有的數據都保持一致狀態。

    • 當轉賬操作完成時,所有賬戶的總金額應該保持不變,此時數據處于一致性狀態;如果總金額發生了改變,說明數據處于非一致性狀態。
  • 3、隔離性:數據庫系統提供的隔離機制,保證事務在不受外部并發操作影響的獨立環境下運行。

    • 比如張三和李四同時都在進行轉賬操作,但彼此都不影響對方。
  • 4、持久性:事務一旦提交或回滾,它對數據庫中的數據的改變就是永久的。

3、事務的操作

  • 創建賬戶表
CREATE TABLE account(id INT primary key AUTO_INCREMENT comment "主鍵",name VARCHAR(10) COMMENT "姓名",money INT COMMENT "余額"
)COMMENT "賬戶表";
INSERT INTO account VALUES(null,"張三",2000),(null,"李四",2000);

3.1、查看/設置事務的提交方式
SELECT @@autocommit;
SET @@autocommit = 0;--設置為0是手動提交,1是自動提交		
3.2、提交事務
COMMIT;
3.3、回滾事務
ROLLBACK;
3.4、事務的舉例
CREATE TABLE account(id INT primary key AUTO_INCREMENT comment "主鍵",name VARCHAR(10) COMMENT "姓名",money INT COMMENT "余額"
)COMMENT "賬戶表";
INSERT INTO account VALUES(null,"張三",2000),(null,"李四",2000);SELECT @@autocommit;
set @@autocommit=0;--設置為手動提交-- 轉賬操作(張三給李四1000)
--1、張三的余額是多少
SELECT * FROM ACCOUNT WHERE name = "張三";
--2、將張三的余額減1000
UPDATE account SET money=money-1000 WHERE name = "張三";
lsdfjlsd
--3、將李四的余額加1000
UPDATE account SET money= money+1000 WHERE name = "李四";--提交事務
COMMIT;--回滾事務
ROLLBACK;--恢復數據
UPDATE account SET money = 2000 WHERE name = "張三" or name = '李四';
START TRANSACTION;      -- 或 BEGIN
UPDATE accounts SET balance = balance - 100 WHERE id = 1;
UPDATE accounts SET balance = balance + 100 WHERE id = 2;
COMMIT;                -- 提交事務(持久化)
-- 或 ROLLBACK;        -- 回滾事務(撤銷所有操作)

4、并發事務問題

  1. 臟讀(Dirty Read)
    • 一個事務讀取了另一個事務未提交的更改數據。
    • 如果第二個事務回滾,那么第一個事務讀取的數據將是無效的。
  2. 不可重復讀(Non-repeatable Read)
    • 在同一事務中,多次讀取同一數據集合,但讀取的結果不同。
    • 這通常是由于其他事務在兩次讀取之間更改了數據。
  3. 幻讀(Phantom Read)
    • 同一事務內,多次執行相同條件的查詢時,由于其他事務的插入操作,導致前后查詢結果行數不一致(出現了"幻影行")。
    • 這通常是由于其他事務插入或刪除了數據。

5、事務隔離級別

  • 讀未提交:允許一個事務可以看到其他事務未提交的修改。
  • 讀已提交:允許一個事務只能看到其他事務已經提交的修改,未提交的修改是不可見的。
  • 可重復讀:確保如果在一個事務中執行兩次相同的 SELECT 語句,都能得到相同的結果,不管其他事務是否提交這些修改。 (銀行總賬)
  • 串行化:【序列化】 將一個事務與其他事務完全地隔離

在這里插入圖片描述


  • 查看當前事務隔離級別
SELECT @@TRANSACTION_ISOLATION;
  • 設置隔離級別
    • SESSION僅對當前會話有效
    • GLOBAL對所有新創建的會話有效
    • 如果不指定,默認為SESSION
SET [SESSION|GLOBAL] TRANSANCTION ISOLATION LEVEL {READ UNCOMMITTED|READ COMMITTED|REPEATABLE READ |SERIALIZABLE}

  • 臟讀
    • 創建2個終端。看黑馬視頻做的
--在終端1里做一下操作
CREATE TABLE account (id TINYINT(2) AUTO_INCREMENT PRIMARY KEY COMMENT "編號",name VARCHAR(4) NOT NULL COMMENT "姓名",money INT(4) NOT NULL COMMENT "錢")ENGINE = INNODB CHARSET=UTF8 COMMENT = "賬戶";INSERT INTO account(id,name,money) VALUES(1,"張三",2000),(2,"李四",2000);SELECT * FROM account;
#開始分終端操作
--在終端2
start transaction;
update account set money=money-1000 WHERE name = "張三";
--然后再次回到終端1
SELECT * FROM account;
會發現沒有 money - 1000 ;#因為沒有提交
--回到終端2,提交事務
COMMIT;
  • 不可重復讀取
-- 事務A
BEGIN;
SELECT balance FROM accounts WHERE id = 1; -- 第一次讀取,值為1000
-- 此時事務B更新并提交了數據SELECT balance FROM accounts WHERE id = 1; -- 第二次讀取,值可能變為900(不可重復讀)
COMMIT;
  • 幻讀
-- 事務A
SET TRANSACTION ISOLATION LEVEL REPEATABLE READ;
BEGIN;
SELECT * FROM accounts WHERE balance > 1000; -- 第一次查詢返回2條記錄-- 事務B在此期間執行并提交:
INSERT INTO accounts(id, balance) VALUES(3, 1500);
COMMIT;SELECT * FROM accounts WHERE balance > 1000; -- 第二次查詢仍然返回2條記錄
-- 但如果執行:
SELECT COUNT(*) FROM accounts WHERE balance > 1000; -- 可能返回3(幻讀)
COMMIT;

二、limit

1、limit startIndex ,length

  • startIndex 是起始下標,也就是展示 [startIndex+1,startIndex+5]

  • length 是長度

-- 按照薪資降序,取出排名在前5名的員工?select ename,salfromemporder by sal desclimit 0,5;

2、limit 數字

  • 是指展示前“數字” 位 。
--按照薪資降序,取出排名在前5名的員工?
select ename,salfromemporder by sal desclimit 5; //取前512點一樣。 

3、公式:

  • pageNo:當前頁碼(通常從1開始)。

  • pageSize:每頁顯示的記錄數。

  • (pageNo - 1) * pageSize 計算的是當前頁的第一條記錄在所有記錄中的位置。

--例如
#pageNo = 3(當前是第三頁)
#pageSize = 10(每頁顯示10條記錄)
#起始位置:(3 - 1) * 10 = 20(即從第20條記錄開始)
#每頁記錄數:10
SELECT * FROM your_table
LIMIT 20, 10;

式:

  • pageNo:當前頁碼(通常從1開始)。

  • pageSize:每頁顯示的記錄數。

  • (pageNo - 1) * pageSize 計算的是當前頁的第一條記錄在所有記錄中的位置。

--例如
#pageNo = 3(當前是第三頁)
#pageSize = 10(每頁顯示10條記錄)
#起始位置:(3 - 1) * 10 = 20(即從第20條記錄開始)
#每頁記錄數:10
SELECT * FROM your_table
LIMIT 20, 10;

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

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

相關文章

一套基于 Bootstrap 和 .NET Blazor 的開源企業級組件庫

前言 今天大姚給大家分享一套基于 Bootstrap 和 .NET Blazor 的開源企業級組件庫:Bootstrap Blazor。 項目介紹 BootstrapBlazor 是一套基于 Bootstrap 和 Blazor 的開源(Apache License)、企業級組件庫,無縫整合了 Bootstrap …

mac-M系列芯片安裝軟件報錯:***已損壞,無法打開。推出磁盤問題

因為你安裝的軟件在Intel 或arm芯片的mac上沒有簽名導致。 首先打開任何來源操作 在系統設置中配置,如下圖: 2. 然后打開終端,輸入: sudo spctl --master-disable然后輸入電腦鎖屏密碼 打開了任何來源,還遇到已損壞…

RK3568-鴻蒙5.1與原生固件-扇區對比分析

編譯生成的固件目錄地址 ../openharmony/out/rk3568/packages/phone/images鴻蒙OS RK3568固件分析 通過查看提供的信息,分析RK3568開發板固件的各個組件及其用途: 主要固件組件 根據終端輸出的文件列表,RK3568固件包含以下關鍵組件&#x…

Java正則表達式:從基礎到高級應用全解析

Java正則表達式應用與知識點詳解 一、正則表達式基礎概念 正則表達式(Regular Expression)是通過特定語法規則描述字符串模式的工具,常用于: 數據格式驗證文本搜索與替換字符串分割模式匹配提取 Java通過java.util.regex包提供支持,核心類…

進程間通信--信號量【Linux操作系統】

文章目錄 并發編程相關基礎概念信號量深刻理解信號量使用共享資源的方式分塊使用共享資源的方式會出現的問題舉例子理解信號量的第二個特性---預定信號量要成為計數器面臨的問題 信號量相關操作接口--POSIX庫函數:sem_init庫函數:sem_destroy庫函數&…

謝賽寧團隊提出 BLIP3-o:融合自回歸與擴散模型的統一多模態架構,開創CLIP特征驅動的圖像理解與生成新范式

BLIP3-o 是一個統一的多模態模型,它將自回歸模型的推理和指令遵循優勢與擴散模型的生成能力相結合。與之前擴散 VAE 特征或原始像素的研究不同,BLIP3-o 擴散了語義豐富的CLIP 圖像特征,從而為圖像理解和生成構建了強大而高效的架構。 此外還…

HarmonyOs開發之——— ArkWeb 實戰指南

HarmonyOs開發之——— ArkWeb 實戰指南 謝謝關注!! 前言:上一篇文章主要介紹HarmonyOs開發之———合理使用動畫與轉場:CSDN 博客鏈接 一、ArkWeb 組件基礎與生命周期管理 1.1 Web 組件核心能力概述 ArkWeb 的Web組件支持加載本地或在線網頁,提供完整的生命周期回調體…

黑馬程序員C++2024版筆記 第0章 C++入門

1.C代碼的基礎結構 以hello_world代碼為例&#xff1a; 預處理指令 #include<iostream> using namespace std; 代碼前2行是預處理指令&#xff0c;即代碼編譯前的準備工作。&#xff08;編譯是將源代碼轉化為可執行程序.exe文件的過程&#xff09; 主函數 主函數是…

日語學習-日語知識點小記-構建基礎-JLPT-N4階段(22):復習

日語學習-日語知識點小記-構建基礎-JLPT-N4階段(22):復習 1、前言(1)情況說明(2)工程師的信仰2、知識點(1)復習(2)復習3、單詞(1)日語(2)日語片假名單詞4、對話練習5、單詞辨析記錄6、總結1、前言 (1)情況說明 自己在今年,在日本留學中,目前在語言學校,…

Docker配置SRS服務器 ,ffmpeg使用rtmp協議推流+vlc拉流

目錄 演示視頻 前期配置 Docker配置 ffmpeg配置 vlc配置 下載并運行 SRS 服務 推拉流流程實現 演示視頻 2025-05-18 21-48-01 前期配置 Docker配置 運行 SRS 建議使用 Docker 配置 Docker 請移步&#xff1a; 一篇就夠&#xff01;Windows上Docker Desktop安裝 漢化完整指…

Redis——緩存雪崩、擊穿、穿透

緩存雪崩 大量緩存數據在同一時間過期或者Redis故障宕機時&#xff0c;若此時有大量請求&#xff0c;都會直接訪問到數據庫&#xff0c;導致數據庫壓力倍增甚至宕機。 大量數據同時過期解決方案&#xff1a; 1、均勻設置過期時間&#xff1a; 設置過期時間的時候可以追加一…

開源GPU架構RISC-V VCIX的深度學習潛力測試:從RTL仿真到MNIST實戰

點擊 “AladdinEdu&#xff0c;同學們用得起的【H卡】算力平臺”&#xff0c;H卡級別算力&#xff0c;按量計費&#xff0c;靈活彈性&#xff0c;頂級配置&#xff0c;學生專屬優惠。 一、開篇&#xff1a;AI芯片架構演變的三重挑戰 &#xff08;引述TPUv4采用RISC-V的行業案…

字符串相乘(43)

43. 字符串相乘 - 力扣&#xff08;LeetCode&#xff09; 解法&#xff1a; class Solution { public:string multiply(string num1, string num2) {string res "0";for (int i 0; i < num2.size(); i) {string str multiplyOneNum(num1, num2[num2.size() -…

mathematics-2024《Graph Convolutional Network for Image Restoration: A Survey》

推薦深藍學院的《深度神經網絡加速&#xff1a;cuDNN 與 TensorRT》&#xff0c;課程面向就業&#xff0c;細致講解CUDA運算的理論支撐與實踐&#xff0c;學完可以系統化掌握CUDA基礎編程知識以及TensorRT實戰&#xff0c;并且能夠利用GPU開發高性能、高并發的軟件系統&#xf…

[LevelDB]LevelDB版本管理的黑魔法-為什么能在不鎖表的情況下管理數據?

文章摘要 LevelDB的日志管理系統是怎么通過雙鏈表來進行數據管理為什么LevelDB能夠在不鎖表的情況下進行日志新增 適用人群: 對版本管理機制有開發訴求&#xff0c;并且希望參考LevelDB的版本開發機制。數據庫相關從業者的專業人士。計算機狂熱愛好者&#xff0c;對計算機的…

【C++進階篇】C++容器完全指南:掌握set和map的使用,提升編碼效率

C容器的實踐與應用&#xff1a;輕松掌握set、map與multimap的區別與用法 一. 序列式容器與關聯式容器1.1 序列式容器 (Sequential Containers)1.2 關聯式容器 (Associative Containers) 二. set系列使用2.1 set的構造和迭代器2.2 set的增刪查2.2.1 插入2.2.2 查找2.2.3 刪除 2.…

2_Spring【IOC容器中獲取組件Bean】

Spring中IOC容器中獲取組件Bean 實體類 //接口 public interface TestDemo {public void doSomething(); } // 實現類 public class HappyComponent implements TestDemo {public void doSomething() {System.out.println("HappyComponent is doing something...")…

安卓開飯-ScrollView內嵌套了多個RecyclerView,只想與其中一個RecyclerView有聯動

在 Android 開發中&#xff0c;將 RecyclerView 嵌套在 ScrollView 內通常會導致性能問題和滾動沖突&#xff0c;應盡量避免這種設計。以下是原因和替代方案&#xff1a; 為什么不推薦 RecyclerView ScrollView&#xff1f;?? 性能損耗? RecyclerView 本身已自帶高效回收復…

HTTP 請求中 Content-Type 頭部

HTTP 請求中 Content-Type 頭部可以設置的各種不同的傳輸格式。multipart/form-data 只是其中一種,主要用于傳輸包含文件的數據。 以下是一些常見的 HTTP 請求體的 Content-Type 及其用途: 常見的數據傳輸格式 (Content-Type) 列表: application/json: 描述: 用于傳輸 JSO…

【U-boot 命令使用】

文章目錄 1 查詢有哪些命令2 信息查詢命令dbinfo - 查看板子信息printenv- 輸出環境變量信息version - 輸出uboot版本信息 3 環境變量操作命令修改環境變量新建環境變量刪除環境變量 4 內存操作命令md命令nm命令mm命令mv命令cp命令cmp命令 5 網絡操作命令與網絡有關的環境變量p…