mysql怎么存儲(chǔ)數(shù)據(jù) mysql 存儲(chǔ)數(shù)據(jù)

mysql 存儲(chǔ)過程總結(jié)(一)

1、存儲(chǔ)過程定義:

成都創(chuàng)新互聯(lián)長(zhǎng)期為成百上千家客戶提供的網(wǎng)站建設(shè)服務(wù),團(tuán)隊(duì)從業(yè)經(jīng)驗(yàn)10年,關(guān)注不同地域、不同群體,并針對(duì)不同對(duì)象提供差異化的產(chǎn)品和服務(wù);打造開放共贏平臺(tái),與合作伙伴共同營(yíng)造健康的互聯(lián)網(wǎng)生態(tài)環(huán)境。為宜興企業(yè)提供專業(yè)的成都網(wǎng)站建設(shè)、成都網(wǎng)站制作,宜興網(wǎng)站改版等技術(shù)服務(wù)。擁有十多年豐富建站經(jīng)驗(yàn)和眾多成功案例,為您定制開發(fā)。

存儲(chǔ)過程是事先經(jīng)過編譯并存儲(chǔ)在數(shù)據(jù)庫中的一段 SQL 語句的集合,調(diào)用存儲(chǔ)過程可以簡(jiǎn)化應(yīng)用開發(fā) 人員的很多工作,減少數(shù)據(jù)在數(shù)據(jù)庫和應(yīng)用服務(wù)器之間的傳輸,對(duì)于提高數(shù)據(jù)處理的效率是有好處的。 存儲(chǔ)過程思想上很簡(jiǎn)單,就是數(shù)據(jù)庫 SQL 語言層面的代碼封裝與重用。

2、特點(diǎn):

封裝,復(fù)用 : 可以把某一業(yè)務(wù)SQL封裝在存儲(chǔ)過程中,需要用到 的時(shí)候直接調(diào)用即可。

可以接收參數(shù),也可以返回?cái)?shù)據(jù) :再存儲(chǔ)過程中,可以傳遞參數(shù),也可以接收返回 值。

減少網(wǎng)絡(luò)交互,效率提升 : 如果涉及到多條SQL,每執(zhí)行一次都是一次網(wǎng)絡(luò)傳 輸。 而如果封裝在存儲(chǔ)過程中,我們只需要網(wǎng)絡(luò)交互一次可能就可以了。

3、基本語法

(1)創(chuàng)建:

(2)調(diào)用:

(3)查看:

(4)刪除

注意: 在命令行中,執(zhí)行創(chuàng)建存儲(chǔ)過程的SQL時(shí),需要通過關(guān)鍵字 delimiter 指定SQL語句的 結(jié)束符。

MySQL數(shù)據(jù)庫存儲(chǔ)引擎詳解

存儲(chǔ)引擎是什么?

MySQL中的數(shù)據(jù)用各種不同的技術(shù)存儲(chǔ)在文件(或者內(nèi)存)中 這些技術(shù)中的每一種技術(shù)都使用不同的存儲(chǔ)機(jī)制 索引技巧 鎖定水平并且最終提供廣泛的不同的功能和能力 通過選擇不同的技術(shù) 你能夠獲得額外的速度或者功能 從而改善你的應(yīng)用的整體功能

例如 如果你在研究大量的臨時(shí)數(shù)據(jù) 你也許需要使用內(nèi)存存儲(chǔ)引擎 內(nèi)存存儲(chǔ)引擎能夠在內(nèi)存中存儲(chǔ)所有的表格數(shù)據(jù) 又或者 你也許需要一個(gè)支持事務(wù)處理的數(shù)據(jù)庫(以確保事務(wù)處理不成功時(shí)數(shù)據(jù)的回退能力)

這些不同的技術(shù)以及配套的相關(guān)功能在MySQL中被稱作存儲(chǔ)引擎(也稱作表類型) MySQL默認(rèn)配置了許多不同的存儲(chǔ)引擎 可以預(yù)先設(shè)置或者在MySQL服務(wù)器中啟用 你可以選擇適用于服務(wù)器 數(shù)據(jù)庫和表格的存儲(chǔ)引擎 以便在選擇如何存儲(chǔ)你的信息 如何檢索這些信息以及你需要你的數(shù)據(jù)結(jié)合什么性能和功能的時(shí)候?yàn)槟闾峁┳畲蟮撵`活性

選擇如何存儲(chǔ)和檢索你的數(shù)據(jù)的這種靈活性是MySQL為什么如此受歡迎的主要原因 其它數(shù)據(jù)庫系統(tǒng)(包括大多數(shù)商業(yè)選擇)僅支持一種類型的數(shù)據(jù)存儲(chǔ) 遺憾的是 其它類型的數(shù)據(jù)庫解決方案采取的 一個(gè)尺碼滿足一切需求 的方式意味著你要么就犧牲一些性能 要么你就用幾個(gè)小時(shí)甚至幾天的時(shí)間詳細(xì)調(diào)整你的數(shù)據(jù)庫 使用MySQL 我們僅需要修改我們使用的存儲(chǔ)引擎就可以了

在這篇文章中 我們不準(zhǔn)備集中討論不同的存儲(chǔ)引擎的技術(shù)方面的問題(盡管我們不可避免地要研究這些因素的某些方面) 相反 我們將集中介紹這些不同的引擎分別最適應(yīng)哪種需求和如何啟用不同的存儲(chǔ)引擎 為了實(shí)現(xiàn)這個(gè)目的 在介紹每一個(gè)存儲(chǔ)引擎的具體情況之前 我們必須要了解一些基本的問題

如何確定有哪些存儲(chǔ)引擎可用

你可以在MySQL(假設(shè)是MySQL服務(wù)器 以上版本)中使用顯示引擎的命令得到一個(gè)可用引擎的列表

mysql?show?engines; ?? + + + + ?? |?Engine?????|?Support?|?Comment????????????????????????????????????????????????????| ?? + + + + ?? |?MyISAM?????|?DEFAULT?|?Default?engine?as?of?MySQL? ?with?great?performance?????| ?? |?HEAP???????|?YES?????|?Alias?for?MEMORY???????????????????????????????????????????| ?? |?MEMORY?????|?YES?????|?Hash?based ?stored?in?memory ?useful?for?temporary?tables??| ?? |?MERGE??????|?YES?????|?Collection?of?identical?MyISAM?tables??????????????????????| ?? |?MRG_MYISAM?|?YES?????|?Alias?for?MERGE????????????????????????????????????????????| ?? |?ISAM???????|?NO??????|?Obsolete?storage?engine ?now?replaced?by?MyISAM????????????| ?? |?MRG_ISAM???|?NO??????|?Obsolete?storage?engine ?now?replaced?by?MERGE?????????????| ?? |?InnoDB?????|?YES?????|?Supports?transactions ?row level?locking ?and?foreign?keys?| ?? |?INNOBASE???|?YES?????|?Alias?for?INNODB???????????????????????????????????????????| ?? |?BDB????????|?NO??????|?Supports?transactions?and?page level?locking???????????????| ?? |?BERKELEYDB?|?NO??????|?Alias?for?BDB??????????????????????????????????????????????| ?? |?NDBCLUSTER?|?NO??????|?Clustered ?fault tolerant ?memory based?tables?????????????| ?? |?NDB????????|?NO??????|?Alias?for?NDBCLUSTER???????????????????????????????????????| ?? |?EXAMPLE????|?NO??????|?Example?storage?engine?????????????????????????????????????| ?? |?ARCHIVE????|?NO??????|?Archive?storage?engine?????????????????????????????????????| ?? |?CSV????????|?NO??????|?CSV?storage?engine?????????????????????????????????????????| ?? + + + + ?? ?rows?in?set?( ?sec)??

這個(gè)表格顯示了可用的數(shù)據(jù)庫引擎的全部名單以及在當(dāng)前的數(shù)據(jù)庫服務(wù)器中是否支持這些引擎

對(duì)于MySQL 以前版本 可以使用mysql show variables like have_% (顯示類似 have_% 的變量):

mysql?show?variables?like? have_% ;? ?? + + +? ?? |?Variable_name????|?Value????|? ?? + + +? ?? |?have_bdb?????????|?YES??????|? ?? |?have_crypt???????|?YES??????|? ?? |?have_innodb??????|?DISABLED?|? ?? |?have_isam????????|?YES??????|? ?? |?have_raid????????|?YES??????|? ?? |?have_symlink?????|?YES??????|? ?? |?have_openssl?????|?YES??????|? ?? |?have_query_cache?|?YES??????|? ?? + + +? ?? ?rows?in?set?( ?sec)? ??

你可以通過修改設(shè)置腳本中的選項(xiàng)來設(shè)置在MySQL安裝軟件中可用的引擎 如果你在使用一個(gè)預(yù)先包裝好的MySQL二進(jìn)制發(fā)布版軟件 那么 這個(gè)軟件就包含了常用的引擎 然而 需要指出的是 如果你要使用某些不常用的引擎 特別是CSV RCHIVE(存檔)和BLACKHOLE(黑洞)引擎 你就需要手工重新編譯MySQL源碼

使用一個(gè)指定的存儲(chǔ)引擎

你可以使用很多方法指定一個(gè)要使用的存儲(chǔ)引擎 最簡(jiǎn)單的方法是 如果你喜歡一種能滿足你的大多數(shù)數(shù)據(jù)庫需求的存儲(chǔ)引擎 你可以在MySQL設(shè)置文件中設(shè)置一個(gè)默認(rèn)的引擎類型(使用storage_engine 選項(xiàng))或者在啟動(dòng)數(shù)據(jù)庫服務(wù)器時(shí)在命令行后面加上 default storage engine或 default table type選項(xiàng)

更靈活的方式是在隨MySQL服務(wù)器發(fā)布同時(shí)提供的MySQL客戶端時(shí)指定使用的存儲(chǔ)引擎 最直接的方式是在創(chuàng)建表時(shí)指定存儲(chǔ)引擎的類型 向下面這樣:

CREATE TABLE mytable (id int title char( )) ENGINE = INNODB

你還可以改變現(xiàn)有的表使用的存儲(chǔ)引擎 用以下語句:

ALTER TABLE mytable ENGINE = MyISAM

然而 你在以這種方式修改表格類型的時(shí)候需要非常仔細(xì) 因?yàn)閷?duì)不支持同樣的索引 字段類型或者表大小的一個(gè)類型進(jìn)行修改可能使你丟失數(shù)據(jù) 如果你指定一個(gè)在你的當(dāng)前的數(shù)據(jù)庫中不存在的一個(gè)存儲(chǔ)引擎 那么就會(huì)創(chuàng)建一個(gè)MyISAM(默認(rèn)的)類型的表

各存儲(chǔ)引擎之間的區(qū)別

為了做出選擇哪一個(gè)存儲(chǔ)引擎的決定 我們首先需要考慮每一個(gè)存儲(chǔ)引擎提供了哪些不同的核心功能 這種功能使我們能夠把不同的存儲(chǔ)引擎區(qū)別開來 我們一般把這些核心功能分為四類:支持的字段和數(shù)據(jù)類型 鎖定類型 索引和處理 一些引擎具有能過促使你做出決定的獨(dú)特的功能 我們一會(huì)兒再仔細(xì)研究這些具體問題

字段和數(shù)據(jù)類型

雖然所有這些引擎都支持通用的數(shù)據(jù)類型 例如整型 實(shí)型和字符型等 但是 并不是所有的引擎都支持其它的字段類型 特別是BLOG(二進(jìn)制大對(duì)象)或者TEXT文本類型 其它引擎也許僅支持有限的字符寬度和數(shù)據(jù)大小

這些局限性可能直接影響到你可以存儲(chǔ)的數(shù)據(jù) 同時(shí)也可能會(huì)對(duì)你實(shí)施的搜索的類型或者你對(duì)那些信息創(chuàng)建的索引產(chǎn)生間接的影響 這些區(qū)別能夠影響你的應(yīng)用程序的性能和功能 因?yàn)槟惚仨氁鶕?jù)你要存儲(chǔ)的數(shù)據(jù)類型選擇對(duì)需要的存儲(chǔ)引擎的功能做出決策

鎖定

數(shù)據(jù)庫引擎中的鎖定功能決定了如何管理信息的訪問和更新 當(dāng)數(shù)據(jù)庫中的一個(gè)對(duì)象為信息更新鎖定了 在更新完成之前 其它處理不能修改這個(gè)數(shù)據(jù)(在某些情況下還不允許讀這種數(shù)據(jù))

鎖定不僅影響許多不同的應(yīng)用程序如何更新數(shù)據(jù)庫中的信息 而且還影響對(duì)那個(gè)數(shù)據(jù)的查詢 這是因?yàn)椴樵兛赡芤L問正在被修改或者更新的數(shù)據(jù) 總的來說 這種延遲是很小的 大多數(shù)鎖定機(jī)制主要是為了防止多個(gè)處理更新同一個(gè)數(shù)據(jù) 由于向數(shù)據(jù)中插入信息和更新信息這兩種情況都需要鎖定 你可以想象 多個(gè)應(yīng)用程序使用同一個(gè)數(shù)據(jù)庫可能會(huì)有很大的影響

不同的存儲(chǔ)引擎在不同的對(duì)象級(jí)別支持鎖定 而且這些級(jí)別將影響可以同時(shí)訪問的信息 得到支持的級(jí)別有三種:表鎖定 塊鎖定和行鎖定 支持最多的是表鎖定 這種鎖定是在MyISAM中提供的 在數(shù)據(jù)更新時(shí) 它鎖定了整個(gè)表 這就防止了許多應(yīng)用程序同時(shí)更新一個(gè)具體的表 這對(duì)應(yīng)用很多的多用戶數(shù)據(jù)庫有很大的影響 因?yàn)樗舆t了更新的過程

頁級(jí)鎖定使用Berkeley DB引擎 并且根據(jù)上載的信息頁( KB)鎖定數(shù)據(jù) 當(dāng)在數(shù)據(jù)庫的很多地方進(jìn)行更新的時(shí)候 這種鎖定不會(huì)出現(xiàn)什么問題 但是 由于增加幾行信息就要鎖定數(shù)據(jù)結(jié)構(gòu)的最后 KB 當(dāng)需要增加大量的行 也別是大量的小型數(shù)據(jù) 就會(huì)帶來問題

行級(jí)鎖定提供了最佳的并行訪問功能 一個(gè)表中只有一行數(shù)據(jù)被鎖定 這就意味著很多應(yīng)用程序能夠更新同一個(gè)表中的不同行的數(shù)據(jù) 而不會(huì)引起鎖定的問題 只有InnoDB存儲(chǔ)引擎支持行級(jí)鎖定

建立索引

建立索引在搜索和恢復(fù)數(shù)據(jù)庫中的數(shù)據(jù)的時(shí)候能夠顯著提高性能 不同的存儲(chǔ)引擎提供不同的制作索引的技術(shù) 有些技術(shù)也許會(huì)更適合你存儲(chǔ)的數(shù)據(jù)類型

有些存儲(chǔ)引擎根本就不支持索引 其原因可能是它們使用基本表索引(如MERGE引擎)或者是因?yàn)閿?shù)據(jù)存儲(chǔ)的方式不允許索引(例如FEDERATED或者BLACKHOLE引擎)

事務(wù)處理

事務(wù)處理功能通過提供在向表中更新和插入信息期間的可靠性 這種可靠性是通過如下方法實(shí)現(xiàn)的 它允許你更新表中的數(shù)據(jù) 但僅當(dāng)應(yīng)用的應(yīng)用程序的所有相關(guān)操作完全完成后才接受你對(duì)表的更改 例如 在會(huì)計(jì)處理中每一筆會(huì)計(jì)分錄處理將包括對(duì)借方科目和貸方科目數(shù)據(jù)的更改 你需要要使用事務(wù)處理功能保證對(duì)借方科目和貸方科目的數(shù)據(jù)更改都順利完成 才接受所做的修改 如果任一項(xiàng)操作失敗了 你都可以取消這個(gè)事務(wù)處理 這些修改就不存在了 如果這個(gè)事務(wù)處理過程完成了 我們可以通過允許這個(gè)修改來確認(rèn)這個(gè)操作

lishixinzhi/Article/program/MySQL/201311/29301

MySQL數(shù)據(jù)庫新特性之存儲(chǔ)過程入門教程

在MYSQL 中 終于引入了存儲(chǔ)過程這一新特性 這將大大增強(qiáng)MYSQL 的數(shù)據(jù)庫處理能力 在本文中 將指導(dǎo)讀者快速掌握MYSQL 的存儲(chǔ)過程的基本知識(shí) 帶領(lǐng)用戶入門

存儲(chǔ)過程介紹

存儲(chǔ)過程是一組為了完成特定功能的SQL語句集 經(jīng)編譯后存儲(chǔ)在數(shù)據(jù)庫中 用戶通過指定存儲(chǔ)過程的名字并給出參數(shù)(如果該存儲(chǔ)過程帶有參數(shù))來執(zhí)行它 存儲(chǔ)過程可由應(yīng)用程序通過一個(gè)調(diào)用來執(zhí)行 而且允許用戶聲明變量 同時(shí) 存儲(chǔ)過程可以接收和輸出參數(shù) 返回執(zhí)行存儲(chǔ)過程的狀態(tài)值 也可以嵌套調(diào)用

存儲(chǔ)過程的優(yōu)點(diǎn)

作為存儲(chǔ)過程 有以下這些優(yōu)點(diǎn)

( )減少網(wǎng)絡(luò)通信量 調(diào)用一個(gè)行數(shù)不多的存儲(chǔ)過程與直接調(diào)用SQL語句的網(wǎng)絡(luò)通信量可能不會(huì)有很大的差別 可是如果存儲(chǔ)過程包含上百行SQL語句 那么其性能絕對(duì)比一條一條的調(diào)用SQL語句要高得多

( )執(zhí)行速度更快 存儲(chǔ)過程創(chuàng)建的時(shí)候 數(shù)據(jù)庫已經(jīng)對(duì)其進(jìn)行了一次解析和優(yōu)化 其次 存儲(chǔ)過程一旦執(zhí)行 在內(nèi)存中就會(huì)保留一份這個(gè)存儲(chǔ)過程 這樣下次再執(zhí)行同樣的存儲(chǔ)過程時(shí) 可以從內(nèi)存中直接中讀取

( )更強(qiáng)的安全性 存儲(chǔ)過程是通過向用戶授予權(quán)限(而不是基于表) 它們可以提供對(duì)特定數(shù)據(jù)的訪問 提高代碼安全 比如防止 SQL注入

( ) 業(yè)務(wù)邏輯可以封裝存儲(chǔ)過程中 這樣不僅容易維護(hù) 而且執(zhí)行效率也高

當(dāng)然存儲(chǔ)過程也有一些缺點(diǎn) 比如

可移植性方面 當(dāng)從一種數(shù)據(jù)庫遷移到另外一種數(shù)據(jù)庫時(shí) 不少的存儲(chǔ)過程的編寫要進(jìn)行部分修改

存儲(chǔ)過程需要花費(fèi)一定的學(xué)習(xí)時(shí)間去學(xué)習(xí) 比如學(xué)習(xí)其語法等

在MYSQL中 推薦使用MYSQL Query Browswer()這個(gè)工具去進(jìn)行存儲(chǔ)過程的開發(fā)和管理 下面分步驟來學(xué)習(xí)MYSQL中的存儲(chǔ)過程

定義存儲(chǔ)過程的結(jié)束符

在存儲(chǔ)過程中 通常要輸入很多SQL語句 而SQL語句中每個(gè)語句以分號(hào)來結(jié)束 因此要告訴存儲(chǔ)過程 什么位置是意味著整個(gè)存儲(chǔ)過程結(jié)束 所以我們?cè)诰帉懘鎯?chǔ)過程前 先定義分隔符 我們這里定義 // 為分隔符 我們使用DELIMITER //這樣的語法 就可以定義結(jié)束符了 當(dāng)然你可以自己定義其他喜歡的符號(hào)

如何創(chuàng)建存儲(chǔ)過程

下面先看下一個(gè)簡(jiǎn)單的例子 代碼如下

DELIMITER?//CREATEPROCEDURE?`p ` ()LANGUAGE SQLDETERMINISTICSQL SECURITY DEFINERMENT? A procedure BEGINSELECT Hello World ! ;END//

下面講解下存儲(chǔ)過程的組成部分

)首先在定義好終結(jié)符后 使用CREATE PROCEDURE+存儲(chǔ)過程名的方法創(chuàng)建存儲(chǔ)過程 LANGUAGE選項(xiàng)指定了使用的語言 這里默認(rèn)是使用SQL

)DETERMINISTIC關(guān)鍵詞的作用是 當(dāng)確定每次的存儲(chǔ)過程的輸入和輸出都是相同的內(nèi)容時(shí) 可以使用該關(guān)鍵詞 否則默認(rèn)為NOT DETERMINISTIC

) SQL SECURITY關(guān)鍵詞 是表示調(diào)用時(shí)檢查用戶的權(quán)限 當(dāng)值為INVOKER時(shí) 表示是用戶調(diào)用該存儲(chǔ)過程時(shí)檢查 默認(rèn)為DEFINER 即創(chuàng)建存儲(chǔ)過程時(shí)檢查

) MENT部分是存儲(chǔ)過程的注釋說明部分

lishixinzhi/Article/program/MySQL/201404/30557

名稱欄目:mysql怎么存儲(chǔ)數(shù)據(jù) mysql 存儲(chǔ)數(shù)據(jù)
網(wǎng)址分享:http://www.muchs.cn/article24/dohsoje.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供定制開發(fā)、網(wǎng)站設(shè)計(jì)網(wǎng)站導(dǎo)航、網(wǎng)站營(yíng)銷關(guān)鍵詞優(yōu)化靜態(tài)網(wǎng)站

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)

成都網(wǎng)站建設(shè)公司