搜索
首页数据库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
解释InnoDB缓冲池及其对性能的重要性。解释InnoDB缓冲池及其对性能的重要性。Apr 19, 2025 am 12:24 AM

InnoDBBufferPool通过缓存数据和索引页来减少磁盘I/O,提升数据库性能。其工作原理包括:1.数据读取:从BufferPool中读取数据;2.数据写入:修改数据后写入BufferPool并定期刷新到磁盘;3.缓存管理:使用LRU算法管理缓存页;4.预读机制:提前加载相邻数据页。通过调整BufferPool大小和使用多个实例,可以优化数据库性能。

MySQL与其他编程语言:一种比较MySQL与其他编程语言:一种比较Apr 19, 2025 am 12:22 AM

MySQL与其他编程语言相比,主要用于存储和管理数据,而其他语言如Python、Java、C 则用于逻辑处理和应用开发。 MySQL以其高性能、可扩展性和跨平台支持着称,适合数据管理需求,而其他语言在各自领域如数据分析、企业应用和系统编程中各有优势。

学习MySQL:新用户的分步指南学习MySQL:新用户的分步指南Apr 19, 2025 am 12:19 AM

MySQL值得学习,因为它是强大的开源数据库管理系统,适用于数据存储、管理和分析。1)MySQL是关系型数据库,使用SQL操作数据,适合结构化数据管理。2)SQL语言是与MySQL交互的关键,支持CRUD操作。3)MySQL的工作原理包括客户端/服务器架构、存储引擎和查询优化器。4)基本用法包括创建数据库和表,高级用法涉及使用JOIN连接表。5)常见错误包括语法错误和权限问题,调试技巧包括检查语法和使用EXPLAIN命令。6)性能优化涉及使用索引、优化SQL语句和定期维护数据库。

MySQL:初学者的基本技能MySQL:初学者的基本技能Apr 18, 2025 am 12:24 AM

MySQL适合初学者学习数据库技能。1.安装MySQL服务器和客户端工具。2.理解基本SQL查询,如SELECT。3.掌握数据操作:创建表、插入、更新、删除数据。4.学习高级技巧:子查询和窗口函数。5.调试和优化:检查语法、使用索引、避免SELECT*,并使用LIMIT。

MySQL:结构化数据和关系数据库MySQL:结构化数据和关系数据库Apr 18, 2025 am 12:22 AM

MySQL通过表结构和SQL查询高效管理结构化数据,并通过外键实现表间关系。1.创建表时定义数据格式和类型。2.使用外键建立表间关系。3.通过索引和查询优化提高性能。4.定期备份和监控数据库确保数据安全和性能优化。

MySQL:解释的关键功能和功能MySQL:解释的关键功能和功能Apr 18, 2025 am 12:17 AM

MySQL是一个开源的关系型数据库管理系统,广泛应用于Web开发。它的关键特性包括:1.支持多种存储引擎,如InnoDB和MyISAM,适用于不同场景;2.提供主从复制功能,利于负载均衡和数据备份;3.通过查询优化和索引使用提高查询效率。

SQL的目的:与MySQL数据库进行交互SQL的目的:与MySQL数据库进行交互Apr 18, 2025 am 12:12 AM

SQL用于与MySQL数据库交互,实现数据的增、删、改、查及数据库设计。1)SQL通过SELECT、INSERT、UPDATE、DELETE语句进行数据操作;2)使用CREATE、ALTER、DROP语句进行数据库设计和管理;3)复杂查询和数据分析通过SQL实现,提升业务决策效率。

初学者的MySQL:开始数据库管理初学者的MySQL:开始数据库管理Apr 18, 2025 am 12:10 AM

MySQL的基本操作包括创建数据库、表格,及使用SQL进行数据的CRUD操作。1.创建数据库:CREATEDATABASEmy_first_db;2.创建表格:CREATETABLEbooks(idINTAUTO_INCREMENTPRIMARYKEY,titleVARCHAR(100)NOTNULL,authorVARCHAR(100)NOTNULL,published_yearINT);3.插入数据:INSERTINTObooks(title,author,published_year)VA

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无尽的。

热工具

Dreamweaver Mac版

Dreamweaver Mac版

视觉化网页开发工具

记事本++7.3.1

记事本++7.3.1

好用且免费的代码编辑器

mPDF

mPDF

mPDF是一个PHP库,可以从UTF-8编码的HTML生成PDF文件。原作者Ian Back编写mPDF以从他的网站上“即时”输出PDF文件,并处理不同的语言。与原始脚本如HTML2FPDF相比,它的速度较慢,并且在使用Unicode字体时生成的文件较大,但支持CSS样式等,并进行了大量增强。支持几乎所有语言,包括RTL(阿拉伯语和希伯来语)和CJK(中日韩)。支持嵌套的块级元素(如P、DIV),

安全考试浏览器

安全考试浏览器

Safe Exam Browser是一个安全的浏览器环境,用于安全地进行在线考试。该软件将任何计算机变成一个安全的工作站。它控制对任何实用工具的访问,并防止学生使用未经授权的资源。

适用于 Eclipse 的 SAP NetWeaver 服务器适配器

适用于 Eclipse 的 SAP NetWeaver 服务器适配器

将Eclipse与SAP NetWeaver应用服务器集成。