成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

mysql5存儲過程編寫實踐

數據庫 MySQL
mysql5存儲過程是mysql5操作過程中很重要的環節之一,mysql5存儲過程編寫是怎樣的呢?下文中將給出詳細的講解。

MySql5.0以后均支持存儲過程,研究了一下這個格式:

CREATE PROCEDURE 過程名 ([過程參數[,...]])

[特性 ...] 過程體

CREATE FUNCTION 函數名 ([函數參數[,...]])

RETURNS 返回類型

[特性 ...] 函數體

過程參數:

[ IN | OUT | INOUT ] 參數名 參數類型

函數參數:

參數名 參數類型

返回類型:

有效的MySQL數據類型即可

特性:

LANGUAGE SQL

| [NOT] DETERMINISTIC

| { CONTAINS SQL | NO SQL | READS SQL DATA | MODIFIES SQL DATA }

| SQL SECURITY { DEFINER | INVOKER }

| COMMENT 'string'

過程體/函數體:格式如下:

BEGIN

有效的SQL語句

END

我在這里不關心專有的特性,這些與SQL規范不兼容,所以characteristic(特性)的相關內容不作考慮。

//

在開發過程中有幾點要注意:

1、存儲過程注釋:MySQL支持采用--或者/**/注釋,其中前者是行注釋,后者是段式注釋

2、變量首先用declare申明,其中臨時變量可以直接以@前綴修飾以供引用

3、直接采用MySQL的Administrator管理器編輯時,可以直接采用如下函數文本錄入;

但若在腳本中自動導入存儲過程或函數時,由于MySQL默認以";"為分隔符,則過程體的每一句

都被MySQL以存儲過程編譯,則編譯過程會報錯;所以要事先用DELIMITER關鍵字申明當前段分隔符

用完了就把分隔符還原。 如下所示:

DELIMITER $$

Stored Procedures and Functions

DELIMITER ;

4、MySQL支持大量的內嵌函數,有些是和大型商用數據庫如oracle、informix、sybase等一致,

但也有些函數名稱不一致,但功能一致;或者有些名稱一致,但功能相異,這個特別對于從

這些數據庫開發轉過來的DBA要注意。

5、存儲過程或函數的調試:我目前還沒有研究MySQL所帶的各種工具包,還不清楚其提供了調試工具

沒有,不過編譯錯誤相對好查找;至于業務流程的調試,可以采用一個比較笨的方法,就是創建一

個調試表,在包體中各個流程點都插入一條記錄,以觀察程序執行流程。這也是一個比較方便的笨

辦法。^_^

下面是2個例子,提供了一種字串加密的算法,每次以相同的入參調用都會得到不同的加密結果,

算法相對比較簡單,不具備強度。分別以函數和過程的形式分別實現如下:

(1)函數

eg:

CREATE FUNCTION fun_addmm(inpass varchar(10)) RETURNS varchar(11)

BEGIN

declare string_in varchar(39);

declare string_out varchar(78);

declare offset tinyint(2);

declare outpass varchar(30) default ';

declare len tinyint;

/*declare i tinyint;*/

/**/

set len=LENGTH(inpass);

if((len<=0) or (len>10)) then

return "";

end if;

set offset=(SECOND(NOW()) mod 39)+1; /*根據秒數取模*/

/*insert into testtb values(offset,'offset: ');*/

set string_out='YN8K1JOZVURB3MDETS5GPL27AXWIHQ94C6F0#$_'; /*密鑰*/

set string_in='_$#ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789';

set outpass=CONCAT(outpass,SUBSTRING(string_out,offset,1));

/* insert into testtb values(2,outpass);*/

set string_out=CONCAT(string_out,string_out);

set @i=0;

REPEAT

set @i=@i+1;

set outpass=CONCAT(outpass,SUBSTR(string_out,INSTR(string_in,SUBSTRING(inpass,@i,1))+offset,1));

/* insert into testtb values(@i+2,outpass);*/

UNTIL (@i>=len)

end REPEAT;

return outpass;

END

(2)過程

CREATE PROCEDURE `pro_addmm`(IN inpass varchar(10),OUT outpass varchar(11))

BEGIN

declare string_in varchar(39);

declare string_out varchar(78);

declare offset tinyint(2);

declare len tinyint;

set outpass=';

set len=LENGTH(inpass);

if((len<=0) or (len>10)) then

set outpass=';

else

set offset=(SECOND(NOW()) mod 39)+1;

set string_out='YN8K1JOZVURB3MDETS5GPL27AXWIHQ94C6F0#$_';

set string_in='_$#ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789';

set outpass=CONCAT(outpass,SUBSTRING(string_out,offset,1));

set string_out=CONCAT(string_out,string_out);

set @i=0;

REPEAT

set @i=@i+1;

set outpass=CONCAT(outpass,SUBSTR(string_out,INSTR(string_in,SUBSTRING(inpass,@i,1))+offset,1));

UNTIL (@i>=len)

end REPEAT;

end if;

END

//

執行結果如下:

mysql> call pro_addmm('zhouys',@a);

Query OK, 0 rows affected (0.00 sec)

mysql> SELECT @a;

+---------+

| @a |

+---------+

| U_PI6$4 |

+---------+

1 row in set (0.00 sec)

mysql> call pro_addmm('zhouys',@a);

Query OK, 0 rows affected (0.00 sec)

mysql> SELECT @a;

+---------+

| @a |

+---------+

| 9P8UEGM |

+---------+

1 row in set (0.00 sec)

mysql> select fun_submm('U_PI6$4');

+----------------------+

| fun_submm('U_PI6$4') |

+----------------------+

| ZHOUYS |

+----------------------+

1 row in set (0.00 sec)

加密算法有幾個弱點:

1、不支持大小寫

2、不支持中文

3、加密強度不夠

上文中就mysql5存儲過程編寫做出了詳細的講解,希望大家都能夠認真學習,然后都能從中收獲自己所需要的知識,希望能夠幫助到大家。

【編輯推薦】

  1. mysql3升級到mysql5解決亂碼心得
  2. SQL Server 存儲過程的分頁
  3. 一個存儲過程實現增刪操作
  4. 2分法-通用存儲過程分頁
責任編輯:迎迎 來源: ChinaItLab
相關推薦

2010-06-04 19:57:09

2010-05-13 16:15:21

MySQL5 mast

2022-01-07 06:12:08

RPC框架限流

2010-04-07 12:08:28

Oracle存儲過程

2009-05-13 10:29:01

存儲過程OracleJava

2009-11-07 11:18:57

2010-07-06 14:06:52

SQL Server存

2020-11-26 10:33:44

MySQL存儲函數

2011-07-04 11:38:06

MySQL

2021-10-15 06:43:11

數據庫存儲過程

2011-03-31 10:38:28

SQL Server編寫優化

2010-04-15 16:06:02

Oracle存儲過程

2010-04-27 17:21:39

Oracle存儲過程

2011-02-25 17:47:44

數據庫存儲編寫

2015-07-20 10:27:50

DockerDockerfile創建實例

2010-10-09 17:08:15

MySQL存儲過程

2020-11-02 13:24:49

MySQL數據庫存儲

2010-06-10 12:55:18

MySQL5 mast

2010-06-12 15:46:56

MySQL5

2010-06-01 15:09:55

MySQL 存儲過程
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 日本一区二区三区在线观看 | 日韩av免费在线观看 | 久久久久99 | 日日摸日日碰夜夜爽2015电影 | 国产 欧美 日韩 一区 | 天天色综网 | 91免费看片 | 黑人精品 | 99精品一区二区 | 亚洲激情在线视频 | 免费美女网站 | 久久亚洲一区二区 | 国产精品视频免费播放 | 日本精品免费在线观看 | 国产九九精品 | 国产特黄一级 | 欧美一级在线观看 | 人人看人人爽 | 日韩国产一区 | 国产精品3区 | 欧美二区三区 | 一级看片免费视频囗交动图 | 国产精品久久av | 久久三级影院 | 中文字幕一区在线观看视频 | 国产精品毛片一区二区在线看 | 亚洲视频在线看 | 欧美日韩国产高清视频 | 免费在线观看黄视频 | 国产91久久久久久久免费 | 欧美群妇大交群中文字幕 | 日韩看片 | 欧美一区二区三区国产精品 | 国产情侣久久 | 自拍偷拍中文字幕 | 成年人在线观看 | 福利视频一区二区 | 麻豆久久久久久久久久 | 久久精品国产99国产 | 国产精品亚洲精品久久 | 亚洲国产小视频 |