1. 程式人生 > >mysql儲存過程詳細講解及完整例項下載

mysql儲存過程詳細講解及完整例項下載

一、儲存過程概念
1.儲存過程(Stored Procedure)是一組為了完成特定功能的SQL語句集。經編譯後儲存在資料庫 中。
2.儲存過程是資料庫中的一個重要物件,使用者通過指定儲存過程的名字並給出引數(如果該儲存過 程帶有引數)來執行它。
3.儲存過程是由流控制和SQL語句書寫的過程,這個過程經編譯和優化後儲存在資料庫伺服器中。
4.儲存過程可由應用程式通過一個呼叫來執行,而且允許使用者宣告變數。
5.同時,儲存過程可以接收和輸出引數、返回執行儲存過程的狀態值,也可以巢狀呼叫。
二、儲存過程優點
1.增強了SQL語句的功能和靈活性
2不需要反覆建立一系列處理步驟,保證了資料的完整性
3.降低了網路的通訊量,客戶端呼叫儲存過程只需要傳儲存過程名和相關引數即可,與傳輸SQL語 句相比自然資料量少了很多
4.增強了使用的安全性,通過儲存過程可以使沒有許可權的使用者在控制之下間接地存取資料庫,從而 保證資料的安全。
5.可以實現集中控制,當規則發生改變時,只需要修改儲存過程就可以。。、
三、儲存過程缺點
1.除錯不是很方便。
2.可能沒有建立儲存過程的權利。
3.重新編譯問題。
4.移植性問題。

四、變數

1.使用者變數:以”@”開始,形式為”@變數名。” 使用者變數跟MySQL客戶端是繫結的,設定的變數,只對當前使用者使用的客戶端生效.
2.全域性變數:定義時,以如下兩種形式出現,set GLOBAL 變數名 或者 set @@global.變數名。show global variables; 對所有客戶端生效。只有super許可權才可以設定全域性變數。
3.會話變數:只對連線的客戶端有效。一旦客戶端失去連線,變數失效。show session variables;
4.區域性變數:作用範圍在begin到end語句塊之間。

4.1在該語句塊裡設定的變數declare語句專門用於定義區域性變數。declare numeric number(8,2)【MySQL的資料型別,如:int,float, date, varchar(length)】 default 9.95;

4.2變數賦值:SET 變數名 = 表示式值 [,variable_name= expression ...],set numeric=1.2或者SELECT 2.3 into @x;

五、mysql 儲存程式

1.基本語法:create procedure  過程名 ([過程引數[,...]])[特性 ...] 過程體;先看基本例子

第一種:

delimiter ;;
create procedure proc_on_insert()
begin
end
;;
delimiter
  第二種:
delimiter //
create procedure proc_on_insert()
begin
end
//
delimiter ;;
  注意:

1).這裡需要注意的是delimiter // 和delimiter ;;兩句,delimiter是分割符的意思,因為MySQL預設以";"為分隔符,如果我們沒有宣告分割符,那麼編譯器會把儲存過程當成SQL語句進行處理,則儲存過程的編譯過程會報錯,所以要事先用delimiter關鍵字申明當前段分隔符,這樣MySQL才會將";"當做儲存過程中的程式碼。
2).儲存過程根據需要可能會有輸入、輸出、輸入輸出引數,這裡有一個輸出引數s,型別是int型,如果有多個引數用","分割開。
3).過程體的開始與結束使用begin與emd進行標識。

2..呼叫儲存過程基本語法:call sp_name()

3.引數:MySQL儲存過程的引數用在儲存過程的定義,共有三種引數型別,IN,OUT,INOUT,形式如:

create procedure([[in |out |inout ] 引數名 資料類形...])
in輸入引數:表示該引數的值必須在呼叫儲存過程時指定,在儲存過程中修改該引數的值不能被返回,為預設值
out 輸出引數:該值可在儲存過程內部被改變,並可返回
inout 輸入輸出引數:呼叫時指定,並且可被改變和返回

3.1in引數例子:

drop procedure if exists prc_on_in;
delimiter ;;
create procedure prc_on_in(in num int)
begin
declare number int ;
set number=num;
select number;
end
;;
delimiter ;;
set @num=1;
call prc_on_in(@num);
  3.2out引數建立例子
drop procedure if exists prc_on_out;
delimiter ;;
create procedure prc_on_out(out out_num int)
begin
select out_num;
set out_num=78;
select out_num;
end
;;
delimiter ;;
set @number=6;
call prc_on_out(@number);

3.3inout引數建立例子

drop procedure if exists prc_on_inout;
delimiter ;;
create procedure prc_on_inout(inout p_inout int)
begin
select p_inout;
set p_inout=100;
select p_inout;
end
;;
delimiter ;;
set @p_out=90;
call prc_on_inout(@p_out);

3.4儲存過程中的IF語句(if then elseif then else end if)

drop procedure if exists p_else;
create procedure p_else(in id int)
begin
    if (id > 0) then
        select '> 0' as id;
    elseif (id = 0) then
        select '= 0' as id;
    else
        select '< 0' as id;
    end if;
end;
set @p=-10;
call p_else(@p);

3.5儲存過程中的case when then

drop procedure if exists p_case;
delimiter ;;
create procedure p_case(  
    id int  
)  
begin  
    case id  
    when 1 then     
    select 'one' as trans;  
    when 2 then  
    select 'two' as trans;  
    when 3 then   
    select 'three' as trans;  
    else  
    select 'no trans' as trans;  
    end case;  
end;  
;;
delimiter ;;
set @id=1;
call p_case(@id);

3.6儲存過程中的while do … end while語句

drop procedure if exists p_while_do;  
create procedure p_while_do()  
begin  
    declare i int;  
        set i = 1;  
        while i <= 10 do  
            select concat('index : ', i) ;  
            set i = i + 1;  
        end while;  
end;  
call p_while_do();

3.7儲存過程中的repeat … until end repeat語句

drop procedure if exists p_repeat;
delimiter ;;
create procedure p_repeat(in parameter int)
BEGIN
     declare var int;  
     set var = parameter; 
     REPEAT
     set var = var - 1; 
     set parameter = parameter -2; 
     UNTIL var<0
     end REPEAT;
     select parameter;
END
;;
delimiter ;; 
set @parameter=1;
call p_repeat(@parameter);

這個REPEAT迴圈的功能和前面WHILE迴圈一樣,區別在於它的執行後檢查是否滿足迴圈條件(until i>=5),而WHILE則是執行前檢查(while i<5 do)。
不過要注意until i>=5後面不要加分號,如果加分號,就是提示語法錯誤。

3.8儲存過程中的loop ··· end loop語句

drop procedure if exists p_loop;
delimiter;;
create procedure p_loop(in parameter int)
BEGIN
     declare var int;  
     set var = parameter; 
     LOOP_LABLE:loop
     set var = var - 1; 
     set parameter = parameter -2; 
     if var<0 THEN
   LEAVE LOOP_LABLE;
     END IF;
     end LOOP;
     select parameter;
END
;;
delimiter;;
set @parameter=4;
call p_loop(@parameter);

使用LOOP編寫同樣的迴圈控制語句要比使用while和repeat編寫的要複雜一些:在迴圈內部加入了IF……END IF語句,在IF語句中又加入了LEAVE語句,LEAVE語句的意思是離開迴圈,LEAVE的格式是:LEAVE 迴圈標號。

4.遊標的使用 :定義遊標 ,開啟遊標 ,使用遊標 ,關閉遊標例子

drop table if exists  person;
CREATE TABLE `person` (
  `id` int(11) NOT NULL DEFAULT '0',
  `age` int(11) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
insert into person(age) value(1);
drop procedure if exists prc_test1;
delimiter ;;
create definer = [email protected] procedure prc_test1()
BEGIN
    declare var int;   
     /**跳出迴圈標識**/
   declare done INT DEFAULT FALSE;
     /**宣告遊標**/
   declare cur cursor for select age from person;
   /**迴圈結束設定跳出標識**/
   declare continue handler for not FOUND set done = true;
   /**開啟遊標**/
   open cur;
     LOOP_LABLE:loop
        FETCH cur INTO var;
        select var;
     if done THEN
   LEAVE LOOP_LABLE;
     END IF;
     end LOOP;
     /**關閉遊標**/
   CLOSE cur;
END;
;;
delimiter ;;
call prc_test1();

5.MySQL儲存過程的查詢

5.1.檢視某個資料庫下面的儲存過程

select name from mysql.proc where db=’資料庫名’;
或者
select routine_name frominformation_schema.routines where routine_schema='資料庫名';
或者
show procedure status where db='資料庫名';

5.2.檢視儲存過程的詳細

show create procedure 資料庫.儲存過程名;

6、MySQL儲存過程的修改

ALTER PROCEDURE:更改用CREATE PROCEDURE 建立的預先指定的儲存過程,其不會影響相關儲存過程或儲存功能。

7.刪除儲存過程
drop procedure sp_name //註釋函式名

mysql儲存函式例項下載地址:http://pan.baidu.com/s/1gf1Swk7        密碼:282i

相關推薦

mysql儲存過程詳細講解完整例項下載

一、儲存過程概念1.儲存過程(Stored Procedure)是一組為了完成特定功能的SQL語句集。經編譯後儲存在資料庫 中。2.儲存過程是資料庫中的一個重要物件,使用者通過指定儲存過程的名字並給出引數(如果該儲存過 程帶有引數)來執行它。3.儲存過程是由流控制和SQL語句

mysql儲存過程詳細教程

原文 記錄MYSQL儲存過程中的關鍵語法: DELIMITER // 宣告語句結束符,用於區分; CEATE PROCEDURE demo_in_parameter(IN p_in int) 宣告儲存過程 BEGIN …. EN

mysql 儲存過程、遊標逐行處理的配合使用

1. 資料準備 +----+------+--------+ | id | name | price1 | +----+------+--------+ | 1 | 大米 | 5 | | 2 | 雞蛋 | 4.5 | | 3 | 蘋果 | 6

mysql儲存過程語法例項

儲存過程如同一門程式設計語言,同樣包含了資料型別、流程控制、輸入和輸出和它自己的函式庫。 --------------------基本語法-------------------- 一.建立儲存過程 create procedure sp_name() begin ...

MySQL 儲存過程-原理、語法、函數詳細說明

exp sql 十六進制 作用範圍 安全機制 系統管理員 rtrim 編程 xtra Mysql儲存過程是一組為了完成特定功能的SQL語句集,經過編譯之後存儲在數據庫中,當需要使用該組SQL語句時用戶只需要通過指定儲存過程的名字並給定參數就可以調用執行它了,簡而言之就是一組

mysql儲存過程拼接字串的用法

DROP PROCEDURE IF EXISTS insert_historytable;DELIMITER //CREATE PROCEDURE insert_historytable()BEGIN ##定義判斷變數 DECLARE 1_id varchar(50); DECLARE 1_dissolved

5分鐘學會MySQL儲存過程_1、定義應用場景

                                          &nb

MySQL 儲存過程-原理、語法、函式詳細說明

Mysql儲存過程是一組為了完成特定功能的SQL語句集,經過編譯之後儲存在資料庫中,當需要使用該組SQL語句時使用者只需要通過指定儲存過程的名字並給定引數就可以呼叫執行它了,簡而言之就是一組已經寫好的命令,需要使用的時候拿出來用就可以了。想要快速的瞭解Mysql儲存過程嗎,就一同看一下下文的“Mys

mysql儲存過程例項,查詢多引數賦值

drop procedure if exists p_for_create_customer; create procedure p_for_create_customer()begin declare ii int default 0; declare i int default 1; declare

mysql儲存過程部分函式

轉載,很詳細,就極其不要臉的轉過來儲存一下。點選檢視原文 儲存過程簡介 SQL語句需要先編譯然後執行,而儲存過程(Stored Procedure)是一組為了完成特定功能的SQL語句集,經編譯後儲存在資料庫中,使用者通過指定儲存過程的名字並給定引數(如果該儲存過程帶有引數

mysql 儲存過程建立呼叫

返回(查詢users表的條數 + 傳入的數字) CREATE DEFINER=`root`@`localhost` PROCEDURE `getcount`(OUT s INT, IN t INT) BEGIN SET @t = (SELECT COUNT(1) FROM users);

MySql 儲存過程例項1

MySql 儲存過程例項 將下面的語句複製貼上可以一次性執行完,我已經測試過,沒有問題! MySql儲存過程簡單例項: /********************* 建立表 *****************************/ delimiter // DROP TABLE

關於mysql儲存過程建立動態表名引數處理

轉載請註明出處:簾卷西風的專欄(http://blog.csdn.net/ljxfblog) 最近遊戲開始第二次內測,開始處理操作日誌,最開始把日誌放到同一個表裡面,發現一天時間,平均100玩家線上,操作記錄就超過13萬條,決定拆表,按照日期來儲存日誌,每天的日誌存到一個表裡

mysql儲存過程+遊標迴圈遍歷 判斷 賦值 等例項

CREATE DEFINER=`admin`@`%` PROCEDURE `updateRecommended`() BEGIN DECLARE my_recommended INT; DECLARE my_id INT; DECLARE inviteRelationStr VARCHAR(10000)

MySQL 儲存過程遊標使用

一、儲存過程建立1.1、語法[DELIMITER $$ ]  --宣告結束符號,mysql預設;為語句結束符,這裡聲明後當儲存過程遇到$$才結束。CREATE PROCEDURE pro_name ([[ IN |OUT | INOUT ] 引數名 資料類形...])  --

sqlserver和mysql 函式function、儲存過程的建立異同

前言 函式 儲存過程 總結 前言 函式能在查詢語句中使用比如 select * from store where Get_CityAndProvince(area) like '杭州市' Get_CityAndProvince()

MySQL 儲存過程介紹優缺點

MySQL是最受歡迎的開源RDBMS,被社群和企業廣泛使用。 然而,在它釋出的第一個十年期間,它不支援儲存過程,儲存函式,觸發器和事件。自從MySQL 5.0版本以來,這些功能被新增到MySQL資料庫引擎,使其更加靈活和強大。 儲存過程是儲存在資料庫目錄中

mysql儲存過程簡單例項 變數賦值 遊標遍歷

應用場景: 有兩張表,學生表和對應的各科成績表。 學生表student 欄位:id int, name varchar(20)數值:              1             A              2             B  成績表score 欄

MySQL儲存過程(帶輸入引數)例項

第一次寫儲存過程,參考了《SQL完全手冊》,寫了一個涉及到三張表的儲存過程,簡單實現了往一張表插入資料,修改另外兩張表的功能。MySQL的語法和其他資料庫語法有區別,寫的過程需要特別注意。還有就是";"的問題,需要用D

oracle儲存過程轉換為mysql儲存過程例項總結

最近在接觸資料庫的有關知識,因為水平有限,對資料庫方面的一些知識缺乏瞭解,這次遇見的主要是 資料庫的儲存過程,根據公司專案需求,將oracle的儲存過程切換為mysql的儲存過程,首先oracle的儲存過程與mysql的儲存過程差別是很大的(語法差別很大),通過好多天的網上查