mysql中事務(wù)和存儲過程是什么

mysql中,事務(wù)是用戶定義的一個數(shù)據(jù)操作序列,包含了一組數(shù)據(jù)庫操作命令;事務(wù)把所有的命令作為一個整體一起向系統(tǒng)提交或撤銷操作請求,即這一組數(shù)據(jù)庫命令要么都執(zhí)行,要么都不執(zhí)行,因此事務(wù)是一個不可分割的工作邏輯單元。存儲過程是一組為了完成特定功能的SQL語句集合;一個存儲過程是一個可編程的函數(shù),它在數(shù)據(jù)庫中創(chuàng)建并保存,一般由SQL語句和一些特殊的控制結(jié)構(gòu)組成。

mysql中事務(wù)和存儲過程是什么

本教程操作環(huán)境:windows7系統(tǒng)、mysql8版本、Dell G3電腦。

mysql中的事務(wù)

數(shù)據(jù)庫的事務(wù)(Transaction)是一種機制、是用戶定義的一個數(shù)據(jù)操作序列,包含了一組數(shù)據(jù)庫操作命令。事務(wù)把所有的命令作為一個整體一起向系統(tǒng)提交或撤銷操作請求,即這一組數(shù)據(jù)庫命令要么都執(zhí)行,要么都不執(zhí)行,因此事務(wù)是一個不可分割的工作邏輯單元。

在數(shù)據(jù)庫系統(tǒng)上執(zhí)行并發(fā)操作時,事務(wù)是作為最小的控制單元來使用的,特別適用于多用戶同時操作的數(shù)據(jù)庫系統(tǒng)。例如,航空公司的訂票系統(tǒng)、銀行、保險公司以及證券交易系統(tǒng)等。

MySQL 事務(wù)主要用于處理操作量大,復(fù)雜度高的數(shù)據(jù)。比如說,在人員管理系統(tǒng)中,你刪除一個人員,你既需要刪除人員的基本資料,也要刪除和該人員相關(guān)的信息,如信箱,文章等等,這樣,這些數(shù)據(jù)庫操作語句就構(gòu)成一個事務(wù)!

  • 在 MySQL 中只有使用了 Innodb 數(shù)據(jù)庫引擎的數(shù)據(jù)庫或表才支持事務(wù)。

  • 事務(wù)處理可以用來維護數(shù)據(jù)庫的完整性,保證成批的 SQL 語句要么全部執(zhí)行,要么全部不執(zhí)行。

  • 事務(wù)用來管理 insert、update、delete 語句

一般來說,事務(wù)是必須滿足4個條件(ACID)::原子性(Atomicity,或稱不可分割性)、一致性(Consistency)、隔離性(Isolation,又稱獨立性)、持久性(Durability)。

  • 原子性:一個事務(wù)(transaction)中的所有操作,要么全部完成,要么全部不完成,不會結(jié)束在中間某個環(huán)節(jié)。事務(wù)在執(zhí)行過程中發(fā)生錯誤,會被回滾(Rollback)到事務(wù)開始前的狀態(tài),就像這個事務(wù)從來沒有執(zhí)行過一樣。

  • 一致性:在事務(wù)開始之前和事務(wù)結(jié)束以后,數(shù)據(jù)庫的完整性沒有被破壞。這表示寫入的資料必須完全符合所有的預(yù)設(shè)規(guī)則,這包含資料的精確度、串聯(lián)性以及后續(xù)數(shù)據(jù)庫可以自發(fā)性地完成預(yù)定的工作。

  • 隔離性:數(shù)據(jù)庫允許多個并發(fā)事務(wù)同時對其數(shù)據(jù)進行讀寫和修改的能力,隔離性可以防止多個事務(wù)并發(fā)執(zhí)行時由于交叉執(zhí)行而導(dǎo)致數(shù)據(jù)的不一致。事務(wù)隔離分為不同級別,包括讀未提交(Read uncommitted)、讀提交(read committed)、可重復(fù)讀(repeatable read)和串行化(Serializable)。

  • 持久性:事務(wù)處理結(jié)束后,對數(shù)據(jù)的修改就是永久的,即便系統(tǒng)故障也不會丟失。

mysql中的存儲過程

存儲過程是存儲在數(shù)據(jù)庫目錄中的一組為了完成特定功能的SQL語句集合。使用存儲過程的目的是將常用或復(fù)雜的工作預(yù)先用 SQL 語句寫好并用一個指定名稱存儲起來,這個過程經(jīng)編譯和優(yōu)化后存儲在數(shù)據(jù)庫服務(wù)器中,因此稱為存儲過程。當(dāng)以后需要數(shù)據(jù)庫提供與已定義好的存儲過程的功能相同的服務(wù)時,只需調(diào)用“CALL存儲過程名字”即可自動完成。

常用操作數(shù)據(jù)庫的 SQL 語句在執(zhí)行的時候需要先編譯,然后執(zhí)行。存儲過程則采用另一種方式來執(zhí)行 SQL 語句。

一個存儲過程是一個可編程的函數(shù),它在數(shù)據(jù)庫中創(chuàng)建并保存,一般由 SQL 語句和一些特殊的控制結(jié)構(gòu)組成。當(dāng)希望在不同的應(yīng)用程序或平臺上執(zhí)行相同的特定功能時,存儲過程尤為合適。

MySQL 5.0 版本以前并不支持存儲過程,這使 MySQL 在應(yīng)用上大打折扣。MySQL 從 5.0 版本開始支持存儲過程,既提高了數(shù)據(jù)庫的處理速度,同時也提高了數(shù)據(jù)庫編程的靈活性

存儲過程是數(shù)據(jù)庫中的一個重要功能,存儲過程可以用來轉(zhuǎn)換數(shù)據(jù)、數(shù)據(jù)遷移、制作報表,它類似于編程語言,一次執(zhí)行成功,就可以隨時被調(diào)用,完成指定的功能操作。

使用存儲過程不僅可以提高數(shù)據(jù)庫的訪問效率,同時也可以提高數(shù)據(jù)庫使用的安全性。

對于調(diào)用者來說,存儲過程封裝了 SQL 語句,調(diào)用者無需考慮邏輯功能的具體實現(xiàn)過程。只是簡單調(diào)用即可,它可以由觸發(fā)器,其他存儲過程以及Java,? Python,PHP等應(yīng)用程序調(diào)用。

MySQL存儲過程的優(yōu)點

  • 通常存儲過程有助于提高應(yīng)用程序的性能。一旦創(chuàng)建,存儲過程就會被編譯并存儲在數(shù)據(jù)庫中。但是,MySQL實現(xiàn)的存儲過程略有不同。MySQL存儲過程是按需編譯的。編譯存儲過程后,MySQL將其放入緩存并為每個連接維護自己的存儲過程緩存。如果應(yīng)用程序在單個連接中多次使用存儲過程,則使用編譯版本,否則,存儲過程的工作方式類似于查詢。

  • 存儲過程有助于減少應(yīng)用程序和數(shù)據(jù)庫服務(wù)器之間的流量,因為應(yīng)用程序必須只發(fā)送存儲過程的名稱和參數(shù),而不是發(fā)送多個冗長的SQL語句。

  • 存儲過程對任何應(yīng)用程序都是可重用且透明的。存儲過程將數(shù)據(jù)庫接口公開給所有應(yīng)用程序,以便開發(fā)人員不必開發(fā)存儲過程中已經(jīng)支持的功能。

  • 存儲過程是安全的。數(shù)據(jù)庫管理員可以為訪問數(shù)據(jù)庫中的存儲過程的應(yīng)用程序授予適當(dāng)?shù)臋?quán)限,而無需為基礎(chǔ)數(shù)據(jù)庫表提供任何權(quán)限。

【相關(guān)推薦:mysql視頻教程

以上就是

? 版權(quán)聲明
THE END
喜歡就支持一下吧
點贊12 分享