数据库中的变量和函数

一,变量

Sql本质是一种编程语言,需要很多的变量来保存数据,mysql中很多的属性控制都是通过mysql中固有的变量来实现的。

1.系统变量

系统内部定义的变量,系统变量针对所有的用户有效。(全局变量)

查看系统变量:

show variables like ‘XXX’

Mysql中允许用于使用select 查询变量数据值(系统变量)

基本语法: select @变量名;

修改系统变量:分为两种方式

  1. 局部修改:(会话级别)只针对当前自己客户端当次连接有效

Set 变量名 = 新值;

     2.全局修改:针对所有客户端,所有时刻都有效

Set global 变量名 = 新值;

全局修改之后,所有连接的客户端并没有发生变化,全局修改只针对新客户生效。

如果想要本次连接对应的变量有效,不能使用全局修改,只能使用会话级别修改。

2.会话变量

会话变量也称之为用户变量,会话变量跟mysql客户端是绑定的,设置的变量只针对当前用户使用的客户端生效。

定义会话变量  set @变量名=值;

在mysql中因为没有比较符号 ==,所以是用=代替比较符号,有的时候在赋值的时候就会报错,mysql为了避免系统分不清是赋值还是比较,所以特定增加了一个变量的赋值符号:=

Set @变量名:=值;

Mysql是专门存储数据的,允许将数据从表中取出存储到变量中,查询得到的数据必须只能是一行数据,一个变量对应一个字段,mysql没有数组概念。

  1. 赋值且查赋值过程 :select @变量1=字段1,@变量2= 字段2….from 数据表 where.....
  2. 只赋值不看过程:select字段1,字段2….from 数据源 where …into @变量1,@变量2….
select @name=stu_name,@age=age from my_student limit 1;

我们发现结果都为null,肯定不符合,是因为使用了=号,系统会当作比较符号处理,需要使用:=

select @name:=stu_name,@age:=age from my_student limit 1;

select stu_name,age from my_student ORDER BY heigh DESC LIMIT 1 into @name,@age;

select @name,@age;

二,内置函数 

函数

在mysql中,函数分为两类,系统函数(内置函数)和自定义函数。

不管是内置函数还是用户自己定义的函数,都是使用select 函数名(参数列表)调用

1.字符串函数

Char_length(); 判断字符串的字符数

Length(); 判断字符串的字节数

Concat(); 字符串拼接

Instr(); 判断字符串在目标字符串中是否存在,如果存在返回其位置,如果不存在返回0

Lcase(); 全部小写

Left(); 从左侧指定位置开始截取字符串,截取的长度由第二个参数规定

LTrim(); 去掉左侧空格

Mid(); 从中间截取,如果不指定长度,直接截取到最后 共有3个参数  1.指定的字符串 2.从哪里开始截取 3.截取长度

select CHAR_LENGTH('你好中国'),LENGTH('你好中国');

select CONCAT('你好','中国');

select INSTR('你好中国','中');select INSTR('你好中国','嘿');

select LCASE('aBcD');

select LEFT('你好中国',2);

select MID('你好中国',1,1);

select LTRIM(' a bcd    ');

2.时间函数

Now();  返回当前时间日期

Curdate(); 返回当前日期

Curtime(); 返回当前时间

Datediff(); 判断两个日期时间的天数差距,参数日期必须使用字符串格式,越靠近现在的时间则表示越大,那么在计算日期天数的时候,有可能出现负数。

From_unixtime(); 根据时间毫秒数转换成时间

select NOW(),CURRENT_DATE,CURRENT_TIME,CURRENT_TIMESTAMP;

select DATEDIFF('2022-08-01','2022-12-31');

select FROM_UNIXTIME('1999999999');

3.数学函数

Abs(); 绝对值

Ceiling(); 向上取整

Floor(); 向下取整

Pow(); 求指数 谁的多少次方

Rand(); 0-1求随机数

Round(); 四舍五入

select ABS(-1),CEILING(1.1),FLOOR(1.7),POW(2,4),RAND(),ROUND(1.5);

4.其他函数

Md5(); 对数据进行加密,MD5的加入与其他任何地方的md5加密出来的内容是一样的。

Version(); 获取版本号

Database(); 显示当前数据库

UUID(); 生成一个唯一标识符(类似于自增长)自增长是单表唯一,UUID是全库唯一,数据唯一同时空间唯一。

select MD5('123456');

select VERSION();

select database();

select UUID();

三,自定义函数

概念:用户自己定义的函数

函数:实现某种功能的语句块,可能由多条语句构成。

函数内部的每条指令都是一个独立的个体,需要符合语句定义规范,需要语句结束符,(分号),函数又是一个整体,而且函数是在调用的时候才会被执行,那么当设计函数的时候,意味着整体不能中断,与分号矛盾了,mysql中一旦见到语句结束符,那么就开始自动自行。

解决矛盾:在定义函数之前,尝试修改语句结束符,用临时的语句结束符

基本语法:delimiter

修改临时语句结束符: delimiter $$;  使用系统非内置即可 一般使用$$

中间是正常的sql指令,使用分号结束,系统不会执行,因为不认识分号

使用新的符号 进行数据操作

修改回来语句结束符  delimiter ;

1.创建函数

自定义函数包含几个要素:function 关键字 函数名 参数(形参、实参) 确认函数的返回值 函数体  返回值

基本语法:

  修改语句结束符 $$

  Create function 函数名(参数) returns 返回值类型

   Begin

     //函数体

   End

   语句结束符 $$

  修改语句结束符 改回来

并不是所有的函数都需要begin和end,如果函数本身只有一条指令,return,那么可以省略begin和end

delimiter $$

create FUNCTION my_fun1() returns int

BEGIN

   return 10;

end

$$

delimiter ;

create FUNCTION my_fun2() returns int return 100;


delimiter $$

create FUNCTION my_fun3(int_1 int,int_2 int) RETURNS int

begin

  return int_1+int_2;

end

$$

delimiter ;


select my_fun3(1,1);

2.调用函数

自定义函数的调用方式与内置函数调用方式一致,select 函数名(实参列表);

3.查看函数

可以通过查看function状态,查看所有函数

show FUNCTION STATUS like 'my_%';

查看函数的创建语句

show create FUNCTION my_fun1;

4.删除函数

Drop function 函数名;

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

cqq00

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值