前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >5. MySQL编程基础

5. MySQL编程基础

作者头像
卡伊德
发布2022-09-13 14:45:39
2.3K0
发布2022-09-13 14:45:39
举报
文章被收录于专栏:caidblog

⽤户⾃定义变量

⽤户⾃定义变量分为⽤户会话变量(以@开头)以及局部变量(不以@开头)。

⽤户会话变量

MySQL客户机1定义了会话变量,会话期间,该会话变量⼀直有效;MySQL客户机2不能访问ySQL客户 机1定义的会话变量;MySQL客户机1关闭或者MySQL客户机1与服务器断开连接后,MySQL客户机1定 义的所有会话变量将⾃动释放,以便节省MySQL服务器的内存空间。 定义变量

set @user_variable1=expression1 select @user_variable1:=expression1 select expression1 into @user_variable1 查看变量

select @user_variable1 赋值

set @student_count = (select count(*) from student); select @student_count := (select count(*) from student); select @student_count:= count(*) from student; select count(*) into @student_count from student; 使⽤变量

select * from student where student_no=@student_no;

局部变量

定义变量

declare variable type; 局部变量与⽤户会话变量的区别

  • ⽤户会话变量名以“@”开头,⽽局部变量名前⾯没有“@”符号。
  • 局部变量使⽤declare命令定义(存储过程参数、函数参数除外),定义时必须指定局部变量的数 据类型。局部变量定义后,才可以使⽤set命令或者select语句为其赋值。⽤户会话变量使⽤set命 令或者select语句定义并进⾏赋值,定义⽤户会话变量时⽆需指定数据类型(⽤户会话变量是弱类 型)。
  • ⽤户会话变量的作⽤范围与⽣存周期⼤于局部变量。局部变量如果作为存储过程或者函数的参数使⽤,则在整个存储过程或函数内中有效;如果定义在存储程序的 begin-end语句块中,则仅在当前的begin-end语句块内有效。⽤户会话变量在本次会话期间⼀直有效,直⾄关闭服务器连接。
  • 如果局部变量嵌⼊到SQL语句中,由于局部变量名前没有“@”符号,这就要求局部变量名不能与表字段名同名,否则将出现⽆法预期的结果。

运算符与表达式

算术运算符

+(加)、−(减)、*(乘)、/(除)、%(求余)div(求商)

⽐较运算符

=、>、<、>=、 <=、 <>、 is null、between…and…、 in like、regexp

逻辑运算符

not(!) 、and(&&)、 or(||)、 xor

begin-end语句块

相当于java语⾔中的{、} begin-end语句块中,end后以“;”结束。

在每⼀个begin-end语句块中声明的局部变量,仅在当前的begin-end语句块内有效。 允许在⼀个begin-end语句块内使⽤leave语句跳出该语句块(leave语句的使⽤⽅法稍后讲解)。

重置命令结束标记

delimiter $$

例:

delimiter $$ select * from student where student_name = 'A'$$ delimiter ; select * from student where student_name = 'A'; ⾃定义函数

创建⾃定义函数的语法格式

create function函数名(参数1,参数2,…)returns返回值的数据类型    begin     [函数选项]     函数体;     return语句; end;

  • ⾃定义函数是数据库的对象,因此,创建⾃定义函数时,需要指定该⾃定义函数⾪属于哪个数据 库。
  • 同⼀个数据库内,⾃定义函数名不能与已有的函数名(包括系统函数名)重名。建议在⾃定义函数名中统⼀添加前缀“fn”或者后缀“fn”。
  • 函数的参数⽆需使⽤declare命令定义,但它仍然是局部变量,且必须提供参数的数据类型。⾃定 义函数如果没有参数,则使⽤空参数“()”即可。
  • 函数必须指定返回值数据类型,且须与return语句中的返回值的数据类型相近(⻓度可以不同)。

函数选项:

contains sql:表示函数体中不包含读或写数据的语句(例如set命令等)。 no sql:表示函数体 中不包含SQL语句。 reads sql data:表示函数体中包含select查询语句,但不包含更新语句。 modifies sql data:表示函数体包含更新语句。 如果上述选项没有明确指定,默认是contains sql。 例如下⾯的函数实现的功能是为查询结果集添加⾏号:

delimiter $$ create function row_no_fn() returns int no sql begin set @row_no = @row_no + 1; return @row_no; end; $$ delimiter ;

使⽤该函数:

set @row_no=0; select row_no_fn()⾏号,name from student;

下⾯的例⼦实现根据学⽣的学号id查询学⽣的name

delimiter $$ create function get_name_fn(new_id int) returns char(20) reads sql data begin declare student_name char(20); select name into student_name from student where id=new_id; return student_name1; end; $$ delimiter ;

使⽤:

select get_name_fn('2012001');

函数的维护

查看函数

show function status; show function status like XXX;

删除函数

drop function 函数名;

条件控制语句

If(条件表达式1) then 语句块1; [elseif条件表达式2 then语句块2] ... [else语句块n] end if; case 表达式 when value1 then语句块1; when value2 then语句块2; when value3 then语句块3; else语句块n; end case;

循环语句

[循环标签:]while 条件表达式 do 循环体; end while [循环标签]; leave语句(跳出当前循环,相当于java语⾔中的break):

leave 循环标签;

iterate语句(跳出当前循环,继⽽进⾏下次循环。相当于java语⾔中的continue):

iterate 循环标 repeat语句

当条件表达式的值为false时,反复执⾏循环,直到条件表达式的值为true

[循环标签:]repeat 循环体; until条件表达式 end repeat [循环标签];

系统函数

mysql提供了所有常⻅函数,⽐如三⻆函数、字符串处理函数、⽇期处理函数、类型转换函数 等,需要时请⾃⾏查询

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2020/08/16 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • ⽤户⾃定义变量
    • ⽤户会话变量
      • 局部变量
        • declare variable type; 局部变量与⽤户会话变量的区别
        • 运算符与表达式
          • 算术运算符
            • ⽐较运算符
              • 逻辑运算符
              • begin-end语句块
              • 重置命令结束标记
              • delimiter $$ select * from student where student_name = 'A'$$ delimiter ; select * from student where student_name = 'A'; ⾃定义函数
                • 创建⾃定义函数的语法格式
                  • 函数选项:
                  • 函数的维护
                  • 条件控制语句
                    • [循环标签:]while 条件表达式 do 循环体; end while [循环标签]; leave语句(跳出当前循环,相当于java语⾔中的break):
                      • iterate语句(跳出当前循环,继⽽进⾏下次循环。相当于java语⾔中的continue):
                        • iterate 循环标 repeat语句
                        • 系统函数
                        相关产品与服务
                        云数据库 SQL Server
                        腾讯云数据库 SQL Server (TencentDB for SQL Server)是业界最常用的商用数据库之一,对基于 Windows 架构的应用程序具有完美的支持。TencentDB for SQL Server 拥有微软正版授权,可持续为用户提供最新的功能,避免未授权使用软件的风险。具有即开即用、稳定可靠、安全运行、弹性扩缩等特点。
                        领券
                        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档