mysql初學(xué)者怎么使用 MySQL使用方法

MySQL數(shù)據(jù)庫(kù)新特性之存儲(chǔ)過(guò)程入門(mén)教程

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

團(tuán)風(fēng)網(wǎng)站建設(shè)公司創(chuàng)新互聯(lián)建站,團(tuán)風(fēng)網(wǎng)站設(shè)計(jì)制作,有大型網(wǎng)站制作公司豐富經(jīng)驗(yàn)。已為團(tuán)風(fēng)上千提供企業(yè)網(wǎng)站建設(shè)服務(wù)。企業(yè)網(wǎng)站搭建\外貿(mào)網(wǎng)站建設(shè)要多少錢(qián),請(qǐng)找那個(gè)售后服務(wù)好的團(tuán)風(fēng)做網(wǎng)站的公司定做!

存儲(chǔ)過(guò)程介紹

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

)DETERMINISTIC關(guān)鍵詞的作用是 當(dāng)確定每次的存儲(chǔ)過(guò)程的輸入和輸出都是相同的內(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ǔ)過(guò)程時(shí)檢查 默認(rèn)為DEFINER 即創(chuàng)建存儲(chǔ)過(guò)程時(shí)檢查

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

lishixinzhi/Article/program/MySQL/201404/30557

MySQL從入門(mén)到精通(九) MySQL鎖,各種鎖

鎖是計(jì)算機(jī)協(xié)調(diào)多個(gè)進(jìn)程或線程并發(fā)訪問(wèn)某一資源的機(jī)制,在數(shù)據(jù)庫(kù)中,除傳統(tǒng)的計(jì)算資源(CPU、RAM、I/O)爭(zhēng)用外,數(shù)據(jù)也是一種供許多用戶共享的資源,如何保證數(shù)據(jù)并發(fā)訪問(wèn)的一致性,有效性是所有數(shù)據(jù)庫(kù)必須解決的一個(gè)問(wèn)題,鎖沖突也是影響數(shù)據(jù)庫(kù)并發(fā)訪問(wèn)性能的一個(gè)重要因素,從這個(gè)角度來(lái)說(shuō),鎖對(duì)數(shù)據(jù)庫(kù)而言是尤其重要,也更加復(fù)雜。MySQL中的鎖,按照鎖的粒度分為:1、全局鎖,就鎖定數(shù)據(jù)庫(kù)中的所有表。2、表級(jí)鎖,每次操作鎖住整張表。3、行級(jí)鎖,每次操作鎖住對(duì)應(yīng)的行數(shù)據(jù)。

全局鎖就是對(duì)整個(gè)數(shù)據(jù)庫(kù)實(shí)例加鎖,加鎖后整個(gè)實(shí)例就處于只讀狀態(tài),后續(xù)的DML的寫(xiě)語(yǔ)句,DDL語(yǔ)句,已經(jīng)更新操作的事務(wù)提交語(yǔ)句都將阻塞。其典型的使用場(chǎng)景就是做全庫(kù)的邏輯備份,對(duì)所有的表進(jìn)行鎖定,從而獲取一致性視圖,保證數(shù)據(jù)的完整性。但是對(duì)數(shù)據(jù)庫(kù)加全局鎖是有弊端的,如在主庫(kù)上備份,那么在備份期間都不能執(zhí)行更新,業(yè)務(wù)會(huì)受影響,第二如果是在從庫(kù)上備份,那么在備份期間從庫(kù)不能執(zhí)行主庫(kù)同步過(guò)來(lái)的二進(jìn)制日志,會(huì)導(dǎo)致主從延遲。

解決辦法是在innodb引擎中,備份時(shí)加上--single-transaction參數(shù)來(lái)完成不加鎖的一致性數(shù)據(jù)備份。

添加全局鎖: flush tables with read lock; 解鎖 unlock tables。

表級(jí)鎖,每次操作會(huì)鎖住整張表.鎖定粒度大,發(fā)送鎖沖突的概率最高,并發(fā)讀最低,應(yīng)用在myisam、innodb、BOB等存儲(chǔ)引擎中。表級(jí)鎖分為: 表鎖、元數(shù)據(jù)鎖(meta data lock, MDL)和意向鎖。

表鎖又分為: 表共享讀鎖 read lock、表獨(dú)占寫(xiě)鎖write lock

語(yǔ)法: 1、加鎖 lock tables 表名 ... read/write

2、釋放鎖 unlock tables 或者關(guān)閉客戶端連接

注意: 讀鎖不會(huì)阻塞其它客戶端的讀,但是會(huì)阻塞其它客戶端的寫(xiě),寫(xiě)鎖既會(huì)阻塞其它客戶端的讀,又會(huì)阻塞其它客戶端的寫(xiě)。大家可以拿一張表來(lái)測(cè)試看看。

元數(shù)據(jù)鎖,在加鎖過(guò)程中是系統(tǒng)自動(dòng)控制的,無(wú)需顯示使用,在訪問(wèn)一張表的時(shí)候會(huì)自動(dòng)加上,MDL鎖主要作用是維護(hù)表元數(shù)據(jù)的數(shù)據(jù)一致性,在表上有活動(dòng)事務(wù)的時(shí)候,不可以對(duì)元數(shù)據(jù)進(jìn)行寫(xiě)入操作。為了避免DML和DDL沖突,保證讀寫(xiě)的正確性。

在MySQL5.5中引入了MDL,當(dāng)對(duì)一張表進(jìn)行增刪改查的時(shí)候,加MDL讀鎖(共享);當(dāng)對(duì)表結(jié)構(gòu)進(jìn)行變更操作時(shí),加MDL寫(xiě)鎖(排他).

查看元數(shù)據(jù)鎖:

select object_type,object_schema,object_name,lock_type,lock_duration from performance_schema_metadata_locks;

意向鎖,為了避免DML在執(zhí)行時(shí),加的行鎖與表鎖的沖突,在innodb中引入了意向鎖,使得表鎖不用檢查每行數(shù)據(jù)是否加鎖,使用意向鎖來(lái)減少表鎖的檢查。意向鎖分為,意向共享鎖is由語(yǔ)句select ... lock in share mode添加。意向排他鎖ix,由insert,update,delete,select。。。for update 添加。

select object_schema,object_name,index_name,lock_type,lock_mode,lock_data from performance_schema.data_lock;

行級(jí)鎖,每次操作鎖住對(duì)應(yīng)的行數(shù)據(jù),鎖定粒度最小,發(fā)生鎖沖突的概率最高,并發(fā)讀最高,應(yīng)用在innodb存儲(chǔ)引擎中。

innodb的數(shù)據(jù)是基于索引組織的,行鎖是通過(guò)對(duì)索引上的索引項(xiàng)加鎖來(lái)實(shí)現(xiàn)的,而不是對(duì)記錄加的鎖,對(duì)于行級(jí)鎖,主要分為以下三類(lèi):

1、行鎖或者叫record lock記錄鎖,鎖定單個(gè)行記錄的鎖,防止其他事物對(duì)次行進(jìn)行update和delete操作,在RC,RR隔離級(jí)別下都支持。

2、間隙鎖Gap lock,鎖定索引記錄間隙(不含該記錄),確保索引記錄間隙不變,防止其他事物在這個(gè)間隙進(jìn)行insert操作,產(chǎn)生幻讀,在RR隔離級(jí)別下都支持。

3、臨鍵鎖Next-key-lock,行鎖和間隙鎖組合,同時(shí)鎖住數(shù)據(jù),并鎖住數(shù)據(jù)前面的間隙Gap,在RR隔離級(jí)別下支持。

innodb實(shí)現(xiàn)了以下兩種類(lèi)型的行鎖

1、共享鎖 S: 允許一個(gè)事務(wù)去讀一行,阻止其他事務(wù)獲得相同數(shù)據(jù)集的排他鎖。

2、排他鎖 X: 允許獲取排他鎖的事務(wù)更新數(shù)據(jù),阻止其他事務(wù)獲得相同數(shù)據(jù)集的共享鎖和排他鎖。

insert 語(yǔ)句 排他鎖 自動(dòng)添加的

update語(yǔ)句 排他鎖 自動(dòng)添加

delete 語(yǔ)句 排他鎖 自動(dòng)添加

select 正常查詢(xún)語(yǔ)句 不加鎖 。。。

select 。。。lock in share mode 共享鎖 需要手動(dòng)在select 之后加lock in share mode

select 。。。for update 排他鎖 需要手動(dòng)在select之后添加for update

默認(rèn)情況下,innodb在repeatable read事務(wù)隔離級(jí)別運(yùn)行,innodb使用next-key鎖進(jìn)行搜索和索引掃描,以防止幻讀。

間隙鎖唯一目的是防止其它事務(wù)插入間隙,間隙鎖可以共存,一個(gè)事務(wù)采用的間隙鎖不會(huì)阻止另一個(gè)事務(wù)在同一間隙上采用的間隙鎖。

MySQL新手求解

你好,是這樣的。

systemctl start mysqld.service 是以系統(tǒng)服務(wù)來(lái)啟動(dòng)的,主要注冊(cè)到環(huán)境變量中才能啟動(dòng)

service mysql start 是單獨(dú)啟動(dòng)mysql服務(wù)

文章名稱(chēng):mysql初學(xué)者怎么使用 MySQL使用方法
分享地址:http://muchs.cn/article46/hjsphg.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供品牌網(wǎng)站設(shè)計(jì)、網(wǎng)站設(shè)計(jì)公司、微信公眾號(hào)、動(dòng)態(tài)網(wǎng)站、網(wǎng)站維護(hù)、手機(jī)網(wǎng)站建設(shè)

廣告

聲明:本網(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í)需注明來(lái)源: 創(chuàng)新互聯(lián)

搜索引擎優(yōu)化