最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

窺探mysql存儲(chǔ)過程細(xì)節(jié)

 更新時(shí)間:2016年03月23日 15:51:06   作者:跡憶  
這篇文章主要為大家詳細(xì)介紹了mysql存儲(chǔ)過程細(xì)節(jié),對(duì)mysql存儲(chǔ)過程感興趣的小伙伴們可以參考一下

存儲(chǔ)過程,可以這樣認(rèn)為,將我們需要特殊處理的sql語句封裝成函數(shù),當(dāng)需要的時(shí)候我們只需調(diào)用這個(gè)函數(shù)就可以實(shí)現(xiàn)我們想要的操作,這個(gè)過程我們可以稱之為存儲(chǔ)過程。當(dāng)然了,真正存儲(chǔ)過程的定義不是這樣的。但是我們可以這樣簡單的去理解存儲(chǔ)過程。

下面我們看一個(gè)簡單的使用存儲(chǔ)過程的例子。

首先我們新建一張表 proced:

create table proced(
     id int(5) primary key auto_increment,
     name varchar(50),
     type varchar(50)
);

然后我們需要向這個(gè)表中插入10萬條數(shù)據(jù),這個(gè)時(shí)候我們需要借助存儲(chǔ)過程來實(shí)現(xiàn)這一功能。

mysql> delimiter //
mysql> create procedure adddata()
     -->begin
     -->declare n int default 0;
     -->while n<100000
     -->do
     -->insert into proced(name,type) values(‘跡憶博客','onmpw');
     -->set n = n+1;
     -->end while;
     -->end
     -->//
mysql> delimiter ;
mysql> call adddata();

使用上述存儲(chǔ)過程,我們就可以向proced表中插入10萬條數(shù)據(jù)了。

借助上述小例子,我們來講一下如何創(chuàng)建一個(gè)存儲(chǔ)過程。

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

首先我們來看一下創(chuàng)建存儲(chǔ)過程的語法:

CREATE PROCEDURE procedure_name(IN/OUT/INOUT parameter TYPE)
BEGIN
     procedure_body
END

這個(gè)過程比較簡單。

在上面的小例子中我們看到在創(chuàng)建存儲(chǔ)過程之前使用了delimiter //;,創(chuàng)建完成之后又再次 使用了命令 delimiter ;。

delimiter 是界定符,我們知道,在mysql命令行客戶端,是通過分號(hào)(;)來界定一個(gè)命令是否完成的。在存儲(chǔ)過程中,我們會(huì)多次使用到分號(hào),但是這并不代表命令的結(jié)束,所以說我們需要使用delimiter命令來改變這個(gè)界定符。

mysql> delimiter //;  改變界定符為 //
mysql> delimiter ; 重新改變界定符為分號(hào)

所以說我們?nèi)绻褂胢ysql命令行創(chuàng)建存儲(chǔ)過程的話,我們必須在創(chuàng)建存儲(chǔ)過程之前使用上述命令改變界定符。

接下來我們看到procedure_name()中的IN/OUT/INOUT,這是代表什么意思呢?

一個(gè)IN類型的參數(shù)會(huì)傳遞一個(gè)值到存儲(chǔ)哦過程中,也就是我們?cè)诰幊陶Z言中自定義函數(shù)的參數(shù)。如果參數(shù)前面沒有指定是IN/OUT/INOUT,那默認(rèn)會(huì)是IN,看下面的例子:

mysql>delimiter //
mysql> create procedure in_proced(IN param VARCHAR(100))
      -->begin
      -->insert into proced(name,type) values(param,'onmpw');
      -->end
      -->//
mysql>delimiter ;
mysql> call in_proced(‘onmpw.com');

這就是在參數(shù)前指定IN的含義。

下面我們看OUT,指定為OUT的參數(shù)將從存儲(chǔ)過程中傳遞一個(gè)值給調(diào)用者,也就是說,OUT可以認(rèn)為這個(gè)參數(shù)就是我們自定義函數(shù)中的返回值。

mysql> delimiter //
mysql> create procedure out_proced(OUT param INT)
     -->begin
     -->select count(*) into param from proced;
     -->end
     -->//
mysql>delimiter ;
mysql> call out_proced(@a);
mysql>select @a;
+------+
| @a |
+------+
| 3   |
+------+

最后就是INOUT,很明顯INOUT指定的參數(shù)被調(diào)用者初始化,其值在存儲(chǔ)過程中可以被修改,并且任何改變對(duì)于調(diào)用者來說都是可見的。

看下面的例子:

mysql> delimiter //
mysql> create procedure inout_proced(INOUT param INT)
     --> begin
     --> select count(*) into param from proced where id>param;
     --> end
     -->//
mysql>delimiter ;
mysql>set @a = 3;
mysql>call inout_proced(@a);
mysql>select @a; 查看變量的值是否改變

以上就是創(chuàng)建一個(gè)簡單的存儲(chǔ)過程的方式。

刪除存儲(chǔ)過程

刪除存儲(chǔ)過程的語法:

DROP PROCEDURE IF EXISTS procedure_name

下面是使用實(shí)例:

mysql>drop procedure if exists proced;

修改存儲(chǔ)過程

存儲(chǔ)過程的修改時(shí)不能改變存儲(chǔ)過程內(nèi)的sql語句的,只能改變其屬性,其語法如下:

ALTER PROCEDURE proc_name [characteristic ...]

characteristic:
  COMMENT 'string'
  | LANGUAGE SQL
  | { CONTAINS SQL | NO SQL | READS SQL DATA | MODIFIES SQL DATA }
  | SQL SECURITY { DEFINER | INVOKER }

總結(jié):無論是刪除存儲(chǔ)過程還是修改存儲(chǔ)過程,必須保證你要修改或者刪除存儲(chǔ)過程沒有被其他存儲(chǔ)過程使用,例如你有存儲(chǔ)過程A,和存儲(chǔ)過程B。A在B中被使用,如果我們想修改A或者刪除A,必須確保B中不再使用A,否則如果我們刪除A以后,再調(diào)用B的時(shí)候就會(huì)報(bào)錯(cuò)。

舉個(gè)例子:

mysql>delimiter //
mysql>create procedure A(IN pa1 INT,OUT pa2 INT)
     -->begin
     -->select count(*) into pa2 from proced where id>pa1;
     -->end
     -->//
mysql>create procedure B(INOUT pa INT)
     -->begin
     -->declare v int;
     -->call A(pa,v);
     -->set pa = v;
     -->end
     -->//
mysql>delimiter ;
mysql>drop procedure A;
mysql>set @a=5;
mysql>call B(@a);
ERROR 1305 (42000): PROCEDURE test.A does not exists

以上就是對(duì)存儲(chǔ)過程簡單的介紹,希望對(duì)大家學(xué)習(xí)mysql存儲(chǔ)過程有所幫助。

相關(guān)文章

  • MySql行轉(zhuǎn)列&列轉(zhuǎn)行方式

    MySql行轉(zhuǎn)列&列轉(zhuǎn)行方式

    在MySQL數(shù)據(jù)庫管理中,行轉(zhuǎn)列和列轉(zhuǎn)行是常見的數(shù)據(jù)處理需求,行轉(zhuǎn)列通常涉及將表中的行數(shù)據(jù)按照某種規(guī)則轉(zhuǎn)換成列形式,常用于報(bào)表生成、數(shù)據(jù)分析等場(chǎng)景,列轉(zhuǎn)行則是將原本以列形式存儲(chǔ)的數(shù)據(jù)轉(zhuǎn)換成行形式,以便于進(jìn)行進(jìn)一步的數(shù)據(jù)處理或分析
    2024-11-11
  • Mysql5.7在windows7下my.ini文件加載路徑及數(shù)據(jù)位置修改方法

    Mysql5.7在windows7下my.ini文件加載路徑及數(shù)據(jù)位置修改方法

    這篇文章主要介紹了Mysql5.7在windows7下my.ini文件加載路徑及數(shù)據(jù)位置修改方法,需要的朋友可以參考下
    2018-02-02
  • Centos 5.2下安裝多個(gè)mysql數(shù)據(jù)庫配置詳解

    Centos 5.2下安裝多個(gè)mysql數(shù)據(jù)庫配置詳解

    在實(shí)際應(yīng)用中,有時(shí)候,我們需要在同一臺(tái)服務(wù)器上安裝兩個(gè)甚至多個(gè)mysql數(shù)據(jù)庫,那么,如何來操作呢,今天我們就來探討下這個(gè)問題
    2014-07-07
  • MySQL主庫binlog(master-log)與從庫relay-log關(guān)系代碼詳解

    MySQL主庫binlog(master-log)與從庫relay-log關(guān)系代碼詳解

    這篇文章主要介紹了MySQL主庫binlog與從庫relay-log關(guān)系的相關(guān)內(nèi)容,涉及部分代碼,需要的朋友可以參考。
    2017-10-10
  • 淺談MySQL中的group by

    淺談MySQL中的group by

    這篇文章主要介紹了MySQL中的group by,MySQL的group by用于對(duì)查詢的數(shù)據(jù)進(jìn)行分組;此外MySQL提供having子句對(duì)分組內(nèi)的數(shù)據(jù)進(jìn)行過濾。下面來看看文章對(duì)此的具體介紹,需要的朋友可以參考一下,希望對(duì)你有所幫助
    2021-11-11
  • 在MySQL中為何不建議使用utf8

    在MySQL中為何不建議使用utf8

    這篇文章主要介紹了在MySQL中為何不建議使用utf8,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-11-11
  • MySql事務(wù)原理介紹及特性

    MySql事務(wù)原理介紹及特性

    事務(wù)就是一組DML語句組成,這些語句在邏輯上存在相關(guān)性,這一組DML語句要么全部成功,要么全部失敗,是一個(gè)整體。MySQL提供一種機(jī)制,保證我們達(dá)到這樣的效果。事務(wù)還規(guī)定不同的客戶端看到的數(shù)據(jù)是不相同的
    2022-09-09
  • MySQL快速插入一億測(cè)試數(shù)據(jù)

    MySQL快速插入一億測(cè)試數(shù)據(jù)

    本文主要介紹了MySQL快速插入一億測(cè)試數(shù)據(jù),有時(shí)候測(cè)試需要大量的數(shù)據(jù),需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-06-06
  • MySQL連表查詢分組去重的實(shí)現(xiàn)示例

    MySQL連表查詢分組去重的實(shí)現(xiàn)示例

    本文將結(jié)合實(shí)例代碼,介紹MySQL連表查詢分組去重,文中通過示例代碼介紹的非常詳細(xì),需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-07-07
  • SQL語法CONSTRAINT約束操作詳情

    SQL語法CONSTRAINT約束操作詳情

    這篇文章主要介紹了SQL語法CONSTRAINT約束操作詳情,CONSTRAINT,約束,即對(duì)數(shù)據(jù)庫表中的數(shù)據(jù)進(jìn)行約束,以保證數(shù)據(jù)記錄的完整性和有效性。下面來看看文章的學(xué)習(xí)介紹吧
    2022-01-01

最新評(píng)論

东乌珠穆沁旗| 仁怀市| 乌兰浩特市| 民县| 临沭县| 商都县| 怀远县| 米脂县| 凌云县| 鲜城| 河津市| 铜陵市| 高邮市| 翁牛特旗| 罗山县| 博罗县| 泽库县| 怀安县| 蓬莱市| 武乡县| 文化| 朔州市| 图木舒克市| 株洲县| 哈尔滨市| 河津市| 广汉市| 广安市| 汝阳县| 阳信县| 正蓝旗| 台山市| 太康县| 甘肃省| 永川市| 连城县| 卓资县| 萍乡市| 凤冈县| 房产| 宿松县|