首頁 資料庫 mysql教程 Mysql存储过程-基本知识_MySQL

Mysql存储过程-基本知识_MySQL

Jun 01, 2016 pm 01:31 PM
知識 程式設計

bitsCN.com

Mysql存储过程-基本知识

 

存储过程如同一门程序设计语言,同样包含了数据类型、流程控制、输入和输出和它自己的函数库。 

 

--------------------基本语法-------------------- 

一.创建存储过程 

create procedure sp_name() 

begin 

......... 

end 

二.调用存储过程 

1.基本语法:call sp_name() 

注意:存储过程名称后面必须加括号,哪怕该存储过程没有参数传递 

三.删除存储过程 

1.基本语法: 

drop procedure sp_name// 

2.注意事项 

(1)不能在一个存储过程中删除另一个存储过程,只能调用另一个存储过程 

四.其他常用命令 

1.show procedure status 

显示数据库中所有存储的存储过程基本信息,包括所属数据库,存储过程名称,创建时间等 

2.show create procedure sp_name 

显示某一个mysql存储过程的详细信息 

 

--------------------数据类型及运算符-------------------- 

一、基本数据类型: 

略 

二、变量: 

自定义变量:DECLARE   a INT ; SET a=100;    可用以下语句代替:DECLARE a INT DEFAULT 100; 

变量分为用户变量和系统变量,系统变量又分为会话和全局级变量 

用户变量:用户变量名一般以@开头,滥用用户变量会导致程序难以理解及管理 

1、 在mysql客户端使用用户变量 

mysql> SELECT 'Hello World' into @x; 

mysql> SELECT @x; 

mysql> SET @y='Goodbye Cruel World'; 

mysql> select @y; 

mysql> SET @z=1+2+3; 

mysql> select @z; 

 

2、 在存储过程中使用用户变量 

mysql> CREATE PROCEDURE GreetWorld( ) SELECT CONCAT(@greeting,' World'); 

mysql> SET @greeting='Hello'; 

mysql> CALL GreetWorld( ); 

 

3、 在存储过程间传递全局范围的用户变量 

mysql> CREATE PROCEDURE p1( )   SET @last_procedure='p1'; 

mysql> CREATE PROCEDURE p2( ) SELECT CONCAT('Last procedure was ',@last_procedure); 

mysql> CALL p1( ); 

mysql> CALL p2( ); 

 

三、运算符: 

1.算术运算符 

+     加   SET var1=2+2;       4 

-     减   SET var2=3-2;       1 

*      乘   SET var3=3*2;       6 

/     除   SET var4=10/3;      3.3333 

p   整除 SET var5=10 p 3; 3 

%     取模 SET var6=10%3 ;     1 

2.比较运算符 

>            大于 1>2 False 

>=           大于等于 3>=2 True 

BETWEEN      在两值之间 5 BETWEEN 1 AND 10 True 

NOT BETWEEN 不在两值之间 5 NOT BETWEEN 1 AND 10 False 

IN           在集合中 5 IN (1,2,3,4) False 

NOT IN       不在集合中 5 NOT IN (1,2,3,4) True 

=             等于 2=3 False 

, !=       不等于 23 False 

         严格比较两个NULL值是否相等 NULLNULL True 

LIKE          简单模式匹配 "Guy Harrison" LIKE "Guy%" True 

REGEXP       正则式匹配 "Guy Harrison" REGEXP "[Gg]reg" False 

IS NULL      为空 0 IS NULL False 

IS NOT NULL 不为空 0 IS NOT NULL True 

3.逻辑运算符 

4.位运算符 

|   或 

&   与 

>> 右移位 

~   非(单目运算,按位取反) 

注释: 

mysql存储过程可使用两种风格的注释 

双横杠:-- 

该风格一般用于单行注释 

c风格:/* 注释内容 */ 一般用于多行注释 

--------------------流程控制-------------------- 

一、顺序结构 

二、分支结构 

if 

case 

三、循环结构 

for循环 

while循环 

loop循环 

repeat until循环 

注: 

区块定义,常用 

begin 

...... 

end; 

也可以给区块起别名,如: 

lable:begin 

........... 

end lable; 

可以用leave lable;跳出区块,执行区块以后的代码 

begin和end如同C语言中的{ 和 }。 

--------------------输入和输出-------------------- 

mysql存储过程的参数用在存储过程的定义,共有三种参数类型,IN,OUT,INOUT 

Create procedure|function([[IN |OUT |INOUT ] 参数名 数据类形...]) 

IN 输入参数 

表示该参数的值必须在调用存储过程时指定,在存储过程中修改该参数的值不能被返回,为默认值 

OUT 输出参数 

该值可在存储过程内部被改变,并可返回 

INOUT 输入输出参数 

调用时指定,并且可被改变和返回 

IN参数例子: 

CREATE PROCEDURE sp_demo_in_parameter(IN p_in INT) 

BEGIN 

SELECT p_in; --查询输入参数 

SET p_in=2; --修改 

select p_in;--查看修改后的值 

END; 

执行结果: 

mysql> set @p_in=1 

mysql> call sp_demo_in_parameter(@p_in) 

略 

mysql> select @p_in; 

略 

以上可以看出,p_in虽然在存储过程中被修改,但并不影响@p_id的值 

OUT参数例子 

创建: 

mysql> CREATE PROCEDURE sp_demo_out_parameter(OUT p_out INT) 

BEGIN 

SELECT p_out;/*查看输出参数*/ 

SET p_out=2;/*修改参数值*/ 

SELECT p_out;/*看看有否变化*/ 

END; 

执行结果: 

mysql> SET @p_out=1 

mysql> CALL sp_demo_out_parameter(@p_out) 

略 

mysql> SELECT @p_out; 

略 

INOUT参数例子: 

mysql> CREATE PROCEDURE sp_demo_inout_parameter(INOUT p_inout INT) 

BEGIN 

SELECT p_inout; 

SET p_inout=2; 

SELECT p_inout; 

END; 

执行结果: 

set @p_inout=1 

call sp_demo_inout_parameter(@p_inout) // 

略 

select @p_inout; 

略 

 

 

附:函数库 

mysql存储过程基本函数包括:字符串类型,数值类型,日期类型 

一、字符串类 

CHARSET(str) //返回字串字符集 

CONCAT (string2 [,… ]) //连接字串 

INSTR (string ,substring ) //返回substring首次在string中出现的位置,不存在返回0 

LCASE (string2 ) //转换成小写 

LEFT (string2 ,length ) //从string2中的左边起取length个字符 

LENGTH (string ) //string长度 

LOAD_FILE (file_name ) //从文件读取内容 

LOCATE (substring , string [,start_position ] ) 同INSTR,但可指定开始位置 

LPAD (string2 ,length ,pad ) //重复用pad加在string开头,直到字串长度为length 

LTRIM (string2 ) //去除前端空格 

REPEAT (string2 ,count ) //重复count次 

REPLACE (str ,search_str ,replace_str ) //在str中用replace_str替换search_str 

RPAD (string2 ,length ,pad) //在str后用pad补充,直到长度为length 

RTRIM (string2 ) //去除后端空格 

STRCMP (string1 ,string2 ) //逐字符比较两字串大小, 

SUBSTRING (str , position [,length ]) //从str的position开始,取length个字符, 

注:mysql中处理字符串时,默认第一个字符下标为1,即参数position必须大于等于1 

mysql> select substring(’abcd’,0,2); 

+———————–+ 

| substring(’abcd’,0,2) | 

+———————–+ 

|                       | 

+———————–+ 

1 row in set (0.00 sec) 

mysql> select substring(’abcd’,1,2); 

+———————–+ 

| substring(’abcd’,1,2) | 

+———————–+ 

| ab                    | 

+———————–+ 

1 row in set (0.02 sec) 

TRIM([[BOTH|LEADING|TRAILING] [padding] FROM]string2) //去除指定位置的指定字符 

UCASE (string2 ) //转换成大写 

RIGHT(string2,length) //取string2最后length个字符 

SPACE(count) //生成count个空格 

二、数值类型 

ABS (number2 ) //绝对值 

BIN (decimal_number ) //十进制转二进制 

CEILING (number2 ) //向上取整 

CONV(number2,from_base,to_base) //进制转换 

FLOOR (number2 ) //向下取整 

FORMAT (number,decimal_places ) //保留小数位数 

HEX (DecimalNumber ) //转十六进制 

注:HEX()中可传入字符串,则返回其ASC-11码,如HEX(’DEF’)返回4142143 

也可以传入十进制整数,返回其十六进制编码,如HEX(25)返回19 

LEAST (number , number2 [,..]) //求最小值 

MOD (numerator ,denominator ) //求余 

POWER (number ,power ) //求指数 

RAND([seed]) //随机数 

ROUND (number [,decimals ]) //四舍五入,decimals为小数位数] 

注:返回类型并非均为整数,如: 

(1)默认变为整形值 

mysql> select round(1.23); 

+————-+ 

| round(1.23) | 

+————-+ 

|           1 | 

+————-+ 

1 row in set (0.00 sec) 

mysql> select round(1.56); 

+————-+ 

| round(1.56) | 

+————-+ 

|           2 | 

+————-+ 

1 row in set (0.00 sec) 

(2)可以设定小数位数,返回浮点型数据 

mysql> select round(1.567,2); 

+—————-+ 

| round(1.567,2) | 

+—————-+ 

|           1.57 | 

+—————-+ 

1 row in set (0.00 sec) 

SIGN (number2 ) //返回符号,正负或0 

SQRT(number2) //开平方 

 

三、日期类型 

TO_DAYS()   #SELECT TO_DAYS( now( ) ) /365  结果是2014.8822 

YEARWEEK()  #SELECT YEARWEEK( '2013-07-18' ) 结果是201328 

ADDTIME (date2 ,time_interval ) //将time_interval加到date2 

CONVERT_TZ (datetime2 ,fromTZ ,toTZ ) //转换时区 

CURRENT_DATE ( ) //当前日期 

CURRENT_TIME ( ) //当前时间 

CURRENT_TIMESTAMP ( ) //当前时间戳 

DATE (datetime ) //返回datetime的日期部分 

DATE_ADD (date2 , INTERVAL d_value d_type ) //在date2中加上日期或时间 

DATE_FORMAT (datetime ,FormatCodes ) //使用formatcodes格式显示datetime 

DATE_SUB (date2 , INTERVAL d_value d_type ) //在date2上减去一个时间 

DATEDIFF (date1 ,date2 ) //两个日期差 

DAY (date ) //返回日期的天 

DAYNAME (date ) //英文星期 

DAYOFWEEK (date ) //星期(1-7) ,1为星期天 

DAYOFYEAR (date ) //一年中的第几天 

EXTRACT (interval_name FROM date ) //从date中提取日期的指定部分 

MAKEDATE (year ,day ) //给出年及年中的第几天,生成日期串 

MAKETIME (hour ,minute ,second ) //生成时间串 

MONTHNAME (date ) //英文月份名 

NOW ( ) //当前时间 

SEC_TO_TIME (seconds ) //秒数转成时间 

STR_TO_DATE (string ,format ) //字串转成时间,以format格式显示 

TIMEDIFF (datetime1 ,datetime2 ) //两个时间差 

TIME_TO_SEC (time ) //时间转秒数] 

WEEK (date_time [,start_of_week ]) //第几周 

YEAR (datetime ) //年份 

DAYOFMONTH(datetime) //月的第几天 

HOUR(datetime) //小时 

LAST_DAY(date) //date的月的最后日期 

MICROSECOND(datetime) //微秒 

MONTH(datetime) //月 

MINUTE(datetime) //分 

注:可用在INTERVAL中的类型:DAY ,DAY_HOUR ,DAY_MINUTE ,DAY_SECOND ,HOUR ,HOUR_MINUTE ,HOUR_SECOND ,MINUTE ,MINUTE_SECOND,MONTH ,SECOND ,YEAR 

DECLARE variable_name [,variable_name...] datatype [DEFAULT value]; 

其中,datatype为mysql的数据类型,如:INT, FLOAT, DATE, VARCHAR(length) 

例: 

DECLARE l_int INT unsigned default 4000000; 

DECLARE l_numeric NUMERIC(8,2) DEFAULT 9.95; 

DECLARE l_date DATE DEFAULT '1999-12-31'; 

DECLARE l_datetime DATETIME DEFAULT '1999-12-31 23:59:59'; 

DECLARE l_varchar VARCHAR(255) DEFAULT 'This will not be padded'; 

 

 

bitsCN.com
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

AI Hentai Generator

AI Hentai Generator

免費產生 AI 無盡。

熱門文章

R.E.P.O.能量晶體解釋及其做什麼(黃色晶體)
1 個月前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳圖形設置
1 個月前 By 尊渡假赌尊渡假赌尊渡假赌
威爾R.E.P.O.有交叉遊戲嗎?
1 個月前 By 尊渡假赌尊渡假赌尊渡假赌

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

帶你了解相當震撼的win10x系統知識 帶你了解相當震撼的win10x系統知識 Jul 14, 2023 am 11:29 AM

  近日,網路中有win10X系統的最新鏡像下載流出,不同於常見的ISO,此次的鏡像是.ffu格式,目前僅能用於SurfacePro7體驗。雖然很多小夥伴不能體驗,但依舊可以看看評測的相關內容,過過癮,那麼一起來看看win10x系統最新評測吧!win10x系統最新評測1、Win10X與Win10最大的不同首先就表現在開機後開始按鈕等被放在了任務欄中央,除了固定的應用程序,任務欄還可以顯示最近啟動的應用程序,類似於Android和iOS手機。  2、另外一個就是,新系統的「開始」選單不支援文

指令設計及調試過程稱為什麼設計 指令設計及調試過程稱為什麼設計 Jan 20, 2021 pm 03:44 PM

指令設計及調試過程稱為「程式設計」。為解決某一特定問題而設計的指令序列稱為程序,而程序設計是給出解決特定問題程序的過程,是軟體構造活動中的重要組成部分。程式設計過程應包括分析問題、設計演算法、編寫程式、測試、排錯等不同階段。

成為頂尖前端工程師的必修課! 成為頂尖前端工程師的必修課! Mar 25, 2024 pm 04:30 PM

成為頂尖前端工程師的必修課!隨著網路的快速發展和普及,前端開發這一產業也變得越來越熱門。作為連結使用者和產品的紐帶,前端工程師在技術領域中扮演著至關重要的角色,他們不僅需要具備紮實的技術功底,還需要不斷學習和提升自己,保持行業競爭力。要成為頂尖的前端工程師,除了具備基本技術外,還需掌握一系列必修課程。 1.掌握HTML、CSS和JavaScript的基礎作為

c語言程式設計用什麼軟體 c語言程式設計用什麼軟體 Jan 27, 2024 pm 02:36 PM

c語言程式設計的軟體:1、Visual Studio Code;2、Code::Blocks;3、Dev-C++;4、Eclipse CDT ;5、CLion;6、GCC;7、Xcode。詳細介紹:1、Visual Studio Code,這是一個由微軟開發的免費開源程式碼編輯器,支援多種程式語言,包括C語言,VS Code透過安裝各種插件,可以輕鬆配置為適合C語言開發等等。

推薦必備軟體進行C語言程式設計 推薦必備軟體進行C語言程式設計 Feb 19, 2024 pm 12:58 PM

在電腦科學領域中,C語言作為一種廣泛應用的程式語言,具備高效率、靈活等特質。因此,學習和掌握C語言程式設計成為許多電腦專業學生和程式設計愛好者的必修課程。然而,想要有效地學習和使用C語言,一些必備的軟體工具是不可或缺的。本文將介紹幾款建議的C語言程式設計必備軟體。首先,我們來推薦一款強大的整合開發環境(IDE)-Code::Blocks。 Code::Bloc

10個PHP框架及其優點分析 10個PHP框架及其優點分析 May 26, 2023 am 08:10 AM

隨著PHP技術的不斷發展,越來越多的PHP框架應運而生。 PHP框架可以幫助開發人員更快速、有效率地建立Web應用程式。但不同的框架適用於不同的項目,所以了解各框架的優點和缺點非常重要。在這篇文章中,我們將介紹10個PHP框架及其主要優點。 LaravelLaravel是最受歡迎的PHP框架之一,它提供了一種簡單、優雅的方法來建立Web應用程式。 Laravel擁有龐

如何學習與掌握C語言程式設計 如何學習與掌握C語言程式設計 Mar 18, 2024 pm 06:06 PM

如何學習和掌握C語言程式設計,需要具體程式碼範例C語言作為一種被廣泛應用的程式語言,具有高效性和靈活性,學習和掌握C語言程式設計對於想要從事程式設計領域的人來說至關重要。本文將介紹如何學習和掌握C語言程式設計,並附有具體程式碼範例,幫助讀者更能理解。一、入門階段學習基礎語法:在學習C語言之前,需要先掌握基本的程式設計概念,例如變數、資料型別、運算子等。 C語言的語法相對簡

重要性及應用領域:C語言程式設計 重要性及應用領域:C語言程式設計 Feb 23, 2024 pm 10:30 PM

C語言是一種高階程式語言,廣泛應用於電腦科學與技術領域。它以其高效、靈活、可移植等特點,成為程式設計的重要工具。本文將介紹C語言程式設計的重要性與應用領域。首先,C語言的重要性體現在其在電腦科學與技術領域的廣泛應用。 C語言是許多其他程式語言的基礎,如C++、Java等。掌握C語言程式設計對程式設計的學習與理解具有重要意義。無論是作為電腦專業的學生,還是作為

See all articles