mysql

本文详细介绍了MySQL中的系统变量、会话变量、自定义变量以及它们的设置与查看方法。同时涵盖了循环结构,如while、loop和repeat的使用实例,提升代码复用性和效率。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

目录

变量

系统变量

全局变量

会话变量

自定义变量

用户变量

局部变量

存储过程和函数

存储过程

删除

查看

函数

 循环结构

while

 loop

 repeat


变量

系统变量

#查看所有的系统变量
SHOW GLOBAL VARIABLES;
SHOW SESSION VARIABLES;

#查看满足条件的部分系统变量
SHOW GLOBAL VARIABLES LIKE '%char%';

#查看指定的某个系统变量的值
SELECT @@global.系统变量名;

#为某个系统变量赋值
方式一:
SET GLOBAL 系统变量名=值
方式二:
SET @@global.系统变量名=值

全局变量

会话变量

作用域:仅仅针对于当前会话(连接)有效

#查看所有的会话变量
SHOW VARIABLES;
SHOW SESSION VARIABLES;

#查看部分会话变量
SHOW SESSION VARIABLES LIKE '%char%';

#查看指定的某个会话变量
SELECT @@back_log;
SELECT @@session.tx_isolation;

#为某个会话变量赋值
方式一:
SET @@session.tx_isolation='read-uncommitted';
方式二:
SET SESSION tx_isolation='read-uncommitted';

自定义变量

用户变量

作用域:针对于当前会话

#声明并初始化
SET @用户变量名=值;
SET @用户变量名:=值;
SELECT @用户变量名:=值;

#赋值
方式一:
SET @用户变量名=值;
SET @用户变量名:=值;
SELECT @用户变量名:=值;
方式二:
SELECT 字段 INTO 变量

#使用
SELECT @用户变量名;

#案例
#声明并初始化
SET @name='join';
SET @name=100;
SET @count=1;

#赋值
SELECT COUNT(*) INTO @count
FROM employees;

#查看
SELECT @count;

局部变量

作用域:仅仅在定义它的begin end 中有效

应用在begin end 中的第一句话

#声明
DECLARE 变量名 类型;
DECLARE 变量名 类型 DEFAULT 值;

#赋值
方式一:
SET @局部变量名=值;
SET @局部变量名:=值;
SELECT @局部变量名:=值;
方式二:
SELECT 字段 INTO 局部变量名
FROM 表;

#使用
SELECT 局部变量名;
 

存储过程和函数

存储过程

含义:一组预先编译好的sql语句的集合,理解成批处理语句

作用:

1.提高代码重用性,提高效率

#创建
CREATE PROCEDURE 存储过程名(参数列表)
BEGIN
    存储过程体
END

参数列表:参数模式 参数名 参数类型

参数模式:
in:该参数可以作为输入,也就是该参数需要调用方法入值
out:该参数可以作为输出,可以作为返回值
inout:既可以作为输入又可以作为输出

#调用
CALL 存储过程名(实参列表);

#创建存储过程实现,用户是否登录成功
DELIMITER $$
CREATE PROCEDURE abc(IN username VARCHAR(20),IN userpwd VARCHAR(20))
BEGIN 
   DECLARE result INT DEFAULT 0;
   SELECT COUNT(*) INTO result
   FROM users
   WHERE users.`u_name`=username
   AND users.`pwd`=userpwd;
   SELECT IF(result>0,'成功','失败');
END $$

#调用
CALL abc('b','aaa');
#案例:传入a和b两个值,最终a和b都翻倍并返回
DELIMITER $$
CREATE PROCEDURE aaa(INOUT a INT ,INOUT b INT)
BEGIN
SET a=a*2;
SET b=b*2;
SELECT a,b;
END $$

SET @m=2;
SET @n=3;
CALL aaa(@m,@n);

删除

DROP PROCEDURE aaa;

一次只能删除一个存储过程

查看

SHOW CREATE PROCEDURE aaa;

函数

有且仅有一个返回,适合做处理数据后返回一个结果

CREATE FUNCTION 函数名(参数列表) RETURNS 返回类型
BEGIN
函数体
END

注意:

1.参数列表包含:函数名、函数类型。

2.函数体肯定会有return语句

调用方法:

select 函数名(参数列表) 

#无参有返回
#返回公司的员工个数
DELIMITER $$
CREATE FUNCTION abc() RETURNS INT
READS SQL DATA
BEGIN 
DECLARE a INT DEFAULT 0;
SELECT COUNT(*) INTO a
FROM employees;
RETURN a;
END $$

SELECT abc();
SELECT last_name
FROM employees;

#有参有返回
#根据员工名,返回他的工资
DELIMITER $$
CREATE FUNCTION fff(e_name VARCHAR(20)) RETURNS DOUBLE
READS SQL DATA
BEGIN
SET @sql=0;
SELECT salary INTO @sql
FROM employees e
WHERE e.last_name=e_name;
RETURN @sql;
END $$

SELECT fff('hunold');

#查看函数
SHOW CREATE FUNCTION fff;

#删除函数
DROP FUNCTION fff;

 循环结构

分类:while、loop、repeat

循环控制:

1.iterate 类似于continue

2.leave 类似于break

while

【标签:】while 循环条件 DO
循环体
END while【标签】;
 

#案例:根据次数插入到users表中多条记录,如果次数>20则停止
TRUNCATE TABLE users;
DELIMITER $$
CREATE PROCEDURE fmn(IN u_count INT)
BEGIN 
DECLARE i INT DEFAULT 1;
a:WHILE i<u_count DO
INSERT INTO users(u_name,pwd)
VALUES(CONCAT('aa',i),'0000');
IF i>=20 THEN LEAVE a;
END IF;
SET i=i+1;
END WHILE a;
END $$

CALL fmn(50);
SELECT * FROM users;

#案例:根据次数插入到users表中多条记录,直插入奇数
TRUNCATE TABLE users;
DROP  PROCEDURE fmn;
DELIMITER $$
CREATE PROCEDURE fmn(IN u_count INT)
BEGIN 
DECLARE i INT DEFAULT 0;
a:WHILE i<u_count DO
SET i=i+1;
IF MOD(i,2)=0 THEN ITERATE a;
END IF;
INSERT INTO users(u_name,pwd)
VALUES(CONCAT('bb',i),'0000');
END WHILE a;
END $$

CALL fmn(10);
SELECT * FROM users;

 loop

语法:
【标签:】loop
循环体
END loop【标签】;
可以用来模拟简单的死循环

 repeat

语法:
【标签:】repeat
循环体
UNTIL 结束循环的条件
END repeat【标签】;

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值