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

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
您什麼時候應該使用複合索引與多個單列索引?您什麼時候應該使用複合索引與多個單列索引?Apr 11, 2025 am 12:06 AM

在數據庫優化中,應根據查詢需求選擇索引策略:1.當查詢涉及多個列且條件順序固定時,使用複合索引;2.當查詢涉及多個列但條件順序不固定時,使用多個單列索引。複合索引適用於優化多列查詢,單列索引則適合單列查詢。

如何識別和優化MySQL中的慢速查詢? (慢查詢日誌,performance_schema)如何識別和優化MySQL中的慢速查詢? (慢查詢日誌,performance_schema)Apr 10, 2025 am 09:36 AM

要優化MySQL慢查詢,需使用slowquerylog和performance_schema:1.啟用slowquerylog並設置閾值,記錄慢查詢;2.利用performance_schema分析查詢執行細節,找出性能瓶頸並優化。

MySQL和SQL:開發人員的基本技能MySQL和SQL:開發人員的基本技能Apr 10, 2025 am 09:30 AM

MySQL和SQL是開發者必備技能。 1.MySQL是開源的關係型數據庫管理系統,SQL是用於管理和操作數據庫的標準語言。 2.MySQL通過高效的數據存儲和檢索功能支持多種存儲引擎,SQL通過簡單語句完成複雜數據操作。 3.使用示例包括基本查詢和高級查詢,如按條件過濾和排序。 4.常見錯誤包括語法錯誤和性能問題,可通過檢查SQL語句和使用EXPLAIN命令優化。 5.性能優化技巧包括使用索引、避免全表掃描、優化JOIN操作和提升代碼可讀性。

描述MySQL異步主奴隸複製過程。描述MySQL異步主奴隸複製過程。Apr 10, 2025 am 09:30 AM

MySQL異步主從復制通過binlog實現數據同步,提升讀性能和高可用性。 1)主服務器記錄變更到binlog;2)從服務器通過I/O線程讀取binlog;3)從服務器的SQL線程應用binlog同步數據。

mysql:簡單的概念,用於輕鬆學習mysql:簡單的概念,用於輕鬆學習Apr 10, 2025 am 09:29 AM

MySQL是一個開源的關係型數據庫管理系統。 1)創建數據庫和表:使用CREATEDATABASE和CREATETABLE命令。 2)基本操作:INSERT、UPDATE、DELETE和SELECT。 3)高級操作:JOIN、子查詢和事務處理。 4)調試技巧:檢查語法、數據類型和權限。 5)優化建議:使用索引、避免SELECT*和使用事務。

MySQL:數據庫的用戶友好介紹MySQL:數據庫的用戶友好介紹Apr 10, 2025 am 09:27 AM

MySQL的安裝和基本操作包括:1.下載並安裝MySQL,設置根用戶密碼;2.使用SQL命令創建數據庫和表,如CREATEDATABASE和CREATETABLE;3.執行CRUD操作,使用INSERT,SELECT,UPDATE,DELETE命令;4.創建索引和存儲過程以優化性能和實現複雜邏輯。通過這些步驟,你可以從零開始構建和管理MySQL數據庫。

InnoDB緩衝池如何工作,為什麼對性能至關重要?InnoDB緩衝池如何工作,為什麼對性能至關重要?Apr 09, 2025 am 12:12 AM

InnoDBBufferPool通過將數據和索引頁加載到內存中來提升MySQL數據庫的性能。 1)數據頁加載到BufferPool中,減少磁盤I/O。 2)臟頁被標記並定期刷新到磁盤。 3)LRU算法管理數據頁淘汰。 4)預讀機制提前加載可能需要的數據頁。

MySQL:初學者的數據管理易用性MySQL:初學者的數據管理易用性Apr 09, 2025 am 12:07 AM

MySQL適合初學者使用,因為它安裝簡單、功能強大且易於管理數據。 1.安裝和配置簡單,適用於多種操作系統。 2.支持基本操作如創建數據庫和表、插入、查詢、更新和刪除數據。 3.提供高級功能如JOIN操作和子查詢。 4.可以通過索引、查詢優化和分錶分區來提升性能。 5.支持備份、恢復和安全措施,確保數據的安全和一致性。

See all articles

熱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.能量晶體解釋及其做什麼(黃色晶體)
3 週前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳圖形設置
3 週前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.如果您聽不到任何人,如何修復音頻
3 週前By尊渡假赌尊渡假赌尊渡假赌
WWE 2K25:如何解鎖Myrise中的所有內容
3 週前By尊渡假赌尊渡假赌尊渡假赌

熱工具

Safe Exam Browser

Safe Exam Browser

Safe Exam Browser是一個安全的瀏覽器環境,安全地進行線上考試。該軟體將任何電腦變成一個安全的工作站。它控制對任何實用工具的訪問,並防止學生使用未經授權的資源。

記事本++7.3.1

記事本++7.3.1

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

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

MinGW - Minimalist GNU for Windows

MinGW - Minimalist GNU for Windows

這個專案正在遷移到osdn.net/projects/mingw的過程中,你可以繼續在那裡關注我們。 MinGW:GNU編譯器集合(GCC)的本機Windows移植版本,可自由分發的導入函式庫和用於建置本機Windows應用程式的頭檔;包括對MSVC執行時間的擴展,以支援C99功能。 MinGW的所有軟體都可以在64位元Windows平台上運作。

PhpStorm Mac 版本

PhpStorm Mac 版本

最新(2018.2.1 )專業的PHP整合開發工具