MySQL高級1.0

目錄

📌MySQL存儲過程和函數

??存儲過程和函數介紹

??存儲過程的創建和調用

??存儲過程的查看和刪除

??存儲過程語法-變量

??存儲過程語法-if語句

??存儲過程語法-參數傳遞

??存儲過程語法-while循環

??存儲過程語法-存儲函數

📌MySQL觸發器

??觸發器介紹

??觸發器操作

📌MySQL事務

??事務介紹

??事務的操作

??事務的提交方式

??事務的四大特征(ACID)

??事務的隔離級別

📌隔離級別總結


📌MySQL存儲過程和函數

??存儲過程和函數介紹

存儲過程和函數是事先經過編譯并存儲在數據庫中的一段SQL語句的集合。

  • 存儲過程和函數的好處

提高代碼的復用性。

減少數據在數據庫和應用服務器之間的傳輸,提高效率。

減少代碼層面的業務處理。

  • 存儲過程和函數的區別

存儲函數必須有返回值。

存儲過程可以沒有返回值。

??存儲過程的創建和調用

  • 創建存儲過程

-- 修改結束分隔符

DELIMITER$

-- 創建存儲過程

CREATE PROCEDURE 存儲過程名稱(參數列表)

BEGIN

? ? ? ? ? ? ? ? ? ? ? ? ? SQL語句列表;

END$

-- 修改結束分隔符

DELIMITER;

  • 調用存儲過程

CALL 存儲過程名稱(實際參數);

??存儲過程的查看和刪除

  • 查看數據庫中所有的存儲過程

SELECT * FROM mysql.proc WHERE db='數據庫名稱';

  • 刪除存儲過程

DROP PROCEDURE [IF EXISTS] 存儲過程名稱;

??存儲過程語法-變量

  • 定義變量

DECLARE 變量名 數據類型 [DEFAULT默認值];

  • 變量賦值方式一

SET 變量名 = 變量值;

  • 變量賦值方式二

SELECT 列名 INTO 變量名 FROM 表名 [WHERE 條件];

??存儲過程語法-if語句

if語句標準語法

IF 判斷條件1 THEN 執行的sql語句1;

[ELSEIF 判斷條件2 THEN 執行的sql語句2;]

...

[ELSE 執行的sql語句n;]

END IF;

??存儲過程語法-參數傳遞

  • 存儲過程的參數和返回值

CREATE PROCEDURE 存儲過程名稱([IN|OUT|INOUT]參數名 數據類型)

BEGIN

? ? ? ? ? ? ? ? ? ? ? ? SQL語句列表;

END$

IN:代表輸入參數,需要由調用者傳遞實際數據(默認)

OUT:代表輸出參數,該參數可以作為返回值

INOUT:代表既可以作為輸入參數,也可以作為輸出參數

??存儲過程語法-while循環

  • while循環語法

初始化語句:

WHILE 條件判斷語句 DO

? ? ? ? ? ? ? ? 循環體語句;

? ? ? ? ? ? ? ? 條件控制語句;

END WHILE;

??存儲過程語法-存儲函數

  • 存儲函數和存儲過程是非常相似的,區別在于存儲函數必須有返回值。
  • 創建存儲函數

CREATE FUNCTION 函數名稱(參數列表)

RETURNS 返回值類型

BEGIN

? ? ? ? ? ? ? ? ? ? ? ? ?SQL語句列表;

? ? ? ? ? ? ? ? ? ? ? ? ? REUTRN結果;

END$

  • 調用存儲函數

SELECT 函數名稱(實際參數);

  • 刪除存儲函數

DROP FUNCTION 函數名稱;

📌MySQL觸發器

??觸發器介紹

  • 觸發器是與表有關的數據庫對象,可以在insert、update、delete之前或之后觸發并執行觸發器中定義的SQL語句。
  • 這種特殊可以協助應用系統在數據庫端確保數據的完整性、日志記錄、數據校驗等操作。
  • 使用別名NEW和OLD來引用觸發器中發生變化的內容記錄。
  • 觸發器分類
觸發器類型OLDNEW
INSERT型觸發器無(因為插入前無數據)NEW表示將要或者已經新增的數據
UPDATE型觸發器OLD表示修改之前的數據NEW表示將要或已經修改后的數據
DELETE型觸發器OLD表示將要或者已經刪除的數據無(因為刪除后狀態無數據)

??觸發器操作

  • 創建觸發器

DELIMITER $

CREATE TRIGGER 觸發器名稱

BEFORE|AFTER INSERT|UPDATE|DELETE

ON表名

FOR EACH ROW

BEGIN

? ? ? ? ? ? ? ? ? ? ? ? ? ? ?觸發器要執行的功能;

END$

DELIMITER;

  • 查看觸發器

SHOW TRIGGERS;

  • 刪除觸發器

DROP TRIGGER 觸發器名稱;

📌MySQL事務

??事務介紹

  • 事務:一條或多條SQL語句組成一個執行單元,其特點是這個單元要么同時成功要么同時失敗。
  • 單元中的每條SQL語句都相互依賴,形成一個整體。
  • 如果某條SQL語句執行失敗或者出現錯誤,那么整個單元就會撤回到事務最初的狀態。
  • 如果單元中所有的SQL語句都執行成功,則事務就順利執行。

??事務的操作

  • 開啟事務

START TRANSACTION;

  • 回滾事務

ROLLBACK;

  • 提交事務

COMMIT;

??事務的提交方式

  • 事務提交方式的分類

自動提交(mysql默認)

手動提交

  • 查看事務提交方式

SELECT @@AUTOCOMMIT;

  • 修改事務提交方式

SET @@AUTOCOMMIT=數字;

??事務的四大特征(ACID)

  • 原子性(Atomicity)

原子性是指事務包含的所有操作要么全部成功,要么全部失敗回滾。

因此事務的操作如果成功就必須要要完全應用到數據庫,如果操作失敗則不能對數據庫有任何影響。

  • 一致性(Consistency)

一致性是指事務必須使數據庫從一個一致性狀態變換到另一個一致性狀態。

也就是說一個事務執行之前和執行之后都必須處于一致性狀態。

  • 隔離險(isolcation)

隔離性是當多個用戶并發訪問數據庫時,比如操作同一張表時,數據庫為每一個用戶開啟的事務。

不能被其他事務的操作所干擾,多個并發事務之間要相互隔離。

  • 持久性(durability)

持久性是指一個事務一但被提交了,那么對數據庫中的數據的改變就是永久性的。

即便是在數據庫系統遇到故障的情況下也不會丟失提交事務的操作。

??事務的隔離級別

  • 事務的隔離級別

多個客戶端操作時,各個客戶端的事務之間應該是隔離的,相互獨立的,不受影響的。

而如果多個事務操作同一批數據時,就會產生不同的問題,我們需要設置不同的隔離級別來解決這些問題。

  • 隔離級別分類
隔離級別名稱會引發的問題
read uncommitted讀未提交臟讀、不可重復讀、幻讀
read committed讀已提交不可重復讀、幻讀
repeatable read可重復讀幻讀
serializable串行化

  • 引發的問題

問題現象
臟讀在一個事務處理過程中讀取到了另一個未提交事務中的數據,導致兩次查詢結果不一致
不可重復讀在一個事務處理過程中讀取到了另一個事務中修改并已提交的數據,導致兩次查詢結果不一致
幻讀查詢某數據不存在,準備插入此記錄,但執行插入時發現此記錄已存在,無法插入。或查詢數據不存在執行刪除操作,卻發現刪除成功

  • 查詢數據庫隔離級別

SELECT @@TX_ISOLATION;

  • 修改數據庫隔離級別

SET GLOBAL TRANSACTIONISOLATION LEVEL 級別字符串;


📌隔離級別總結

序號隔離級別名稱臟讀不可重復讀幻讀數據庫默認隔離級別
1read uncommitted讀未提交?是
2read committed讀已提交oracle
3repeatable read可重復讀mysql
4serializable串行化

注意:隔離級別從小到大安全性越來越高,但是效率越來越低,所以不建議修改數據庫默認的隔離級別。

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

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

相關文章

Linux高并發服務器開發(六)線程

文章目錄 1. 前言2 線程相關操作3 線程的創建4 進程數據段共享和回收5 線程分離6 線程退出和取消7 線程屬性(了解)8 資源競爭9 互斥鎖9.1 同步與互斥9.2 互斥鎖 10 死鎖11 讀寫鎖12 條件變量13 生產者消費者模型14 信號量15 哲學家就餐 1. 前言 進程是C…

【FFmpeg】avio_open2函數

【FFmpeg】avio_open2函數 1.avio_open21.1 創建URLContext(ffurl_open_whitelist)1.1.1 創建URLContext(ffurl_alloc)1.1.1.1 查找合適的protocol(url_find_protocol)1.1.1.2 為查找到的URLProtocol創建UR…

影響Cache命中率的因素有哪些?

緩存命中率(Cache Hit Rate)是指處理器訪問緩存時,所需數據已經在緩存中找到的次數與總訪問次數的比例。提高緩存命中率可以顯著提升系統性能,因為緩存訪問速度遠快于主存訪問速度。影響緩存命中率的關鍵因素包括: 1.…

C語言異常處理就機制setjmp()和longjmp()

C語言setjmp()和longjmp()實現異常處理機制。 setjmp() 用于保存當前的程序執行狀態。 longjmp() 用于在后面的某個時刻返回到setjmp()點的狀態。 類似goto。但goto是本地的,只能在函數內部跳轉。 setjmp()和longjmp()是非局部跳轉語句,可在調用棧上&a…

通信系統網絡架構_3.移動通信網絡架構

移動通信網為移動互聯網提供了強有力的支持,尤其是5G網絡為個人用戶、垂直行業等提供了多樣化的服務。以下從業務應用角度給出面向5G網絡的組網方式。 1.5GS與DN互連 5GS(5G System)在為移動終端用戶(User Equipment,…

CSRF的其他防范措施?

一般情況下,我們可以通過各種防護策略來防御CSRF,對于QA、SRE、安全負責人等,我們可以做哪些事情來提升安全性呢? 一、CSRF測試 CSRFTester是一款CSRF漏洞的測試工具,CSRFTester工具的測試原理大概是這樣的&#xff…

BLACKBOX.AI:解鎖開發新紀元,加速編程學習的AI神器!

文章目錄 💯BLACKBOX.AI 官網🍁1 BLACKBOX.AI 工具使用教程🍁2 BLACKBOX.AI工具使用界面介紹🍁3 Chat(聊天)功能🍁4 Explore (探索)功能💎4.1 Terminal(終端)功能💎4.2 Discover(發現)功能&…

STM32 IWDG(獨立看門狗)

1 IWDG簡介 STM32有兩個看門狗:一個是獨立看門狗(IWDG),另外一個是窗口看門狗。獨立看門狗也稱寵物狗,窗口看門狗也稱警犬。本文主要分析獨立看門狗的功能和它的應用。 獨立看門狗用通俗一點的話來解釋就是一個12位的…

關于轉BigDecimal對象時,精度問題

//浮點型數值Double d 0.0003d;//轉BigDecimal對象BigDecimal a new BigDecimal(d);System.out.println(String.format("浮點類型數字:%.4f創建BigDecimal對象并且保留多位小數并且保留多位小數時,精度會變多,結果為%s",d,a.setScale(8, BigDecimal.ROUND_DOWN)));…

format()方法——格式化字符串

自學python如何成為大佬(目錄):https://blog.csdn.net/weixin_67859959/article/details/139049996?spm1001.2014.3001.5501 語法介紹 format()可以對數據進行格式化處理操作,語法如下: format(value, format_spec) format_spec為格式化解釋。當參數…

【計算機畢業設計】092基于微信小程序二手閑置交易市場

🙊作者簡介:擁有多年開發工作經驗,分享技術代碼幫助學生學習,獨立完成自己的項目或者畢業設計。 代碼可以私聊博主獲取。🌹贈送計算機畢業設計600個選題excel文件,幫助大學選題。贈送開題報告模板&#xff…

PostgreSQL的系統視圖pg_stat_archiver

PostgreSQL的系統視圖pg_stat_archiver 在 PostgreSQL 數據庫中,pg_stat_archiver 視圖提供了關于歸檔進程(archiver process)的統計信息。歸檔進程負責將 WAL(Write-Ahead Logging)日志文件復制到歸檔存儲&#xff0…

探索區塊鏈:顛覆性技術的崛起

目錄 一、引言 二、區塊鏈技術概述 三、區塊鏈應用場景 四、區塊鏈面臨的挑戰 五、區塊鏈的未來展望 六、結語 一、引言 在數字化浪潮的推動下,區塊鏈技術以其獨特的去中心化、透明性和不可篡改性等特性,正在逐步改變我們的生活。從金融領域到供應…

基于Java的茶文化交流系統【附源碼+LW】

摘 要 計算機網絡發展到現在已經好幾十年了,在理論上面已經有了很豐富的基礎,并且在現實生活中也到處都在使用,可以說,經過幾十年的發展,互聯網技術已經把地域信息的隔閡給消除了,讓整個世界都可以即時通話…

MySQL數據庫存儲引擎

MySQL數據庫存儲引擎 存儲引擎概念 存儲引擎也稱為表類型 通過不同的技術比如說,存儲機制,索引技巧,鎖定水平等等,來提供不同的功能。 查看MySQL支持的存儲引擎 show engines\G; 常用引擎比較 對事務有需求 innodb …

TiDB-從0到1-數據導出導入

TiDB從0到1系列 TiDB-從0到1-體系結構TiDB-從0到1-分布式存儲TiDB-從0到1-分布式事務TiDB-從0到1-MVCCTiDB-從0到1-部署篇TiDB-從0到1-配置篇TiDB-從0到1-集群擴縮容 一、數據導出 TiDB中通過Dumpling來實現數據導出,與MySQL中的mysqldump類似,其屬于…

Spring Boot中如何配置和使用多數據源

Spring Boot中如何配置和使用多數據源 大家好,我是免費搭建查券返利機器人省錢賺傭金就用微賺淘客系統3.0的小編,也是冬天不穿秋褲,天冷也要風度的程序猿!今天,我們將深入探討如何在Spring Boot應用中配置和使用多數據…

oracle with as 是什么并且怎么用

Oracle中的WITH AS語句,也被稱為Common Table Expressions(CTE),是一個用于定義臨時結果集或視圖的子句。這個臨時結果集或視圖只在當前的查詢中存在,并且在查詢完成后會被自動刪除。使用WITH AS可以提高SQL語句的可讀…

JavaWeb——MySQL:navicate客戶端工具簡單使用

目錄 1. 連接 2. 新建數據庫 3. 使用數據庫 4. 新建表 5.使用表 6. 導出數據庫 我這里是英文版,沒有進行漢化。 1. 連接 點擊左上角Connection,選擇MySQL,(我連接的是自己計算機上的數據庫)連接名輸入&#x…

使用ScheduledExecutorService進行任務調度

使用ScheduledExecutorService進行任務調度 大家好,我是免費搭建查券返利機器人省錢賺傭金就用微賺淘客系統3.0的小編,也是冬天不穿秋褲,天冷也要風度的程序猿! 在軟件開發中,任務調度是一項重要的技術需求&#xff…