目录

一、变量

1.1  基本介绍

1.2  系统变量

1.3  自定义变量

二、存储过程

2.1  基本介绍

2.2  存储过程的创建

2.3  存储过程的删除

2.4  存储过程的查看

2.5  存储过程相关案例

三、函数

3.1  基本介绍

3.2  函数的创建

3.3  函数的查看

3.4  函数的删除

四、流程控制结构

4.1  分支结构

4.2  循环结构


一、变量

1.1  基本介绍

-- 变量
/*
1.分类1.系统变量1.全局变量1.作用域服务器每次启动将为所有的全局变量赋初始值,针对于所有的会话(连接)有效,但不能跨重启2.会话变量1.作用域针对于当前的会话(连接)有效    2.自定义变量1.用户变量1.作用域针对当前会话(连接)有效,同于会话变量的作用域应用在任何地方2.局部变量1.作用域仅仅在定义它的begin_end中有效,且必须是第一句
*/

1.2  系统变量

-- 一、系统变量
/*
含义:变量由系统提供,属于服务器层面
语法:1.查看所有的系统变量show global|[session] variables;2.查看满足条件的部分系统变量show global|[session] variables like '%char%';3.查看指定的某个系统变量的值select @@global|[session].系统变量名;4.为某个具体的系统变量赋值1.set global|[session]系统变量名 = 值;2.set @@global|[session].系统变量名 = 值;
*/-- 一、全局变量的演示-- 1.查看所有的全局变量
SHOW GLOBAL VARIABLES;-- 2.查看部分全局变量
SHOW GLOBAL VARIABLES LIKE '%char%';-- 3.查看指定的全局变量值
SELECT @@global.autocommit;
SELECT @@tx_isolation;;-- 4.为某个指定的全局变量赋值
SET @@global.autocommit = 0;
SET GLOBAL autocommit = 1;-- 二、会话变量的演示-- 1.查看所有的会话变量
SHOW SESSION VARIABLES;-- 2.查看部分会话变量
SHOW SESSION VARIABLES LIKE '%char%';-- 3.查看指定的会话变量值
SELECT @@SESSION.tx_isolation;-- 4.为某个指定的会话变量赋值
SET @@session.tx_isolation = 'read-uncommitted';
SET SESSION tx_isolation = 'read-committed';

1.3  自定义变量

-- 二、自定义变量
/*
含义1.变量由用户自定义
步骤1.声明2.赋值3.使用(查看、比较、运算等)
分类1.用户变量2.局部变量*/
/*用户变量
1.声明1.set @用户变量名=值;2.set @用户变量名:=值;3.select @用户变量名:=值;
2.赋值1.同声明方式(3种)2.select 字段 into 变量名 from 表名;
3.查看1.select @用户变量名;
*/
-- 声明、赋值、查看演示
SET @count = 1;SELECT COUNT(*) INTO @count
FROM employees;SELECT @count;/*
局部变量
1.声明1.declare 变量名 类型;2.declare 变量名 类型 default 值;
2.赋值1.同用户变量声明方式(3种)2.select 字段 into 局部变量名 from 表名;
3.查看1.select 局部变量名;
*/
-- 声明两个变量并赋值,求和,并打印
-- 1.用户变量实现
SET @m = 1;
SET @n = 2;
SET @sum = @m + @n;
SELECT @sum;
-- 2.局部变量实现(这里报错,因为局部变量只能放在begin end中)
DECLARE m INT DEFAULT 1;
DECLARE n INT DEFAULT 2;
DECLARE SUM;
SET @Sum = m + n;
SELECT SUM;

二、存储过程

2.1  基本介绍

-- 存储过程
/*
含义1.类似于java中的方法
优势1.提高代码重用性2.减少了编译次数和服务器的连接次数
*/
-- 存储过程
/*
含义1.一组预先编译好的sql语句的集合,理解成批处理语句2.减少了编译次数和服务器的连接次数
语法1.创建create procedure 存储过程名(参数列表)begin存储过程体(一组合法有效的sql语句)end2.调用call 存储过程名(实参列表);3.删除drop procedure 存储过程名4.查看show create procedure 存储过程名5.注意事项1.参数列表包含三部分参数模式    参数名      参数类型IN       stuname     varchar(20)2.参数模式1.IN:作为待传入的参数2.OUT:作为返回值3.INOUT:既可以作为传入的参数,也可以返回3.如果存储过程体只有一句话,BEGIN END可以省略4.存储过程体中的每条SQL语句的结尾必须加分号5.存储过程的结尾可以使用 DELIMITER 重新设置delimiter 结束标记
*/

2.2  存储过程的创建

-- 1.创建存储过程
-- 参数模式为IN的情况
-- 1.插入到admin表中五条记录
DELIMITER $
CREATE PROCEDURE myp1()
BEGININSERT INTO admin(username,PASSWORD)VALUES('john1','0000'),('lily','0000'),('rose','0000'),('jack','0000'),('tom','0000');
END $
CALL myp1()$-- 2.创建存储过程实现,根据女神名,查询对应的男神信息
DELIMITER $
CREATE PROCEDURE myp2(IN beautyName VARCHAR(20))
BEGINSELECT bo.*FROM boys boRIGHT JOIN beauty b ON bo.id = b.boyfriend_idWHERE b.name = beautyName;
END $
CALL myp2('柳岩')$-- 3.创建存储过程实现,判断是否登录成功
DELIMITER $
CREATE PROCEDURE myp3(IN username VARCHAR(20),IN PASSWORD VARCHAR(20))
BEGINDECLARE result INT DEFAULT 0;-- 声明并初始化SELECT COUNT(*) INTO result -- 赋值FROM adminWHERE admin.username = usernameAND PASSWORD = PASSWORD;SELECT IF(result>0,'成功','失败');-- 使用
END $CALL myp3('张飞','8888')$-- 参数模式为IN和OUT的情况-- 1. 根据女神名,返回对应的男神名
DELIMITER $
CREATE PROCEDURE myp5(IN beautyName VARCHAR(20),OUT boyName VARCHAR(20))
BEGINSELECT bo.boyName INTO boyNameFROM boys boINNER JOIN beauty b ON bo.id = b.boyfriend_idWHERE b.name = beautyName;
END $CALL myp5('王语嫣',@bName)$
SELECT @bName$-- 2.根据女神名,返回对应的男神名和男神魅力值
DELIMITER $
CREATE PROCEDURE myp6(IN beautyName VARCHAR(20),OUT boyName VARCHAR(20),OUT userCP INT)
BEGINSELECT bo.boyName,bo.userCP INTO boyName,userCPFROM boys boINNER JOIN beauty b ON bo.id = b.boyfriend_idWHERE b.name = beautyName;
END $
CALL myp6('王语嫣',@bName,@usercp)$
SELECT @bName,@usercp$-- 参数模式为INOUT的情况
-- 1.传入a和b两个值,最终a和b翻倍并返回
DELIMITER $
CREATE PROCEDURE myp8(INOUT a INT,INOUT b INT)
BEGINSET a = a*2;SET b = b*2;
END$SET @m = 10;
SET @n = 20;
CALL myp8(@m,@n)$
SELECT @m,@n$

2.3  存储过程的删除

-- 2.删除存储过程
DROP PROCEDURE myp3;

2.4  存储过程的查看

-- 3.查看存储过程
SHOW CREATE PROCEDURE myp2;

2.5  存储过程相关案例

-- 存储过程相关案例
-- 1.创建存储过程,传入用户名和密码,插入到admin表中
DELIMITER $
CREATE PROCEDURE myp1(IN username VARCHAR(20),IN loginpwd VARCHAR(20))
BEGININSERT INTO admin(admin.username,PASSWORD)VALUES(username,loginpwd);
END$
CALL myp1('admin','0000')$-- 2.创建存储过程,输入女神编号,返回女神名和女神电话
DELIMITER $
CREATE PROCEDURE myp2(IN beautyId INT,OUT beautyName VARCHAR(20),OUT beautyPhone VARCHAR(20))
BEGINSELECT b.name,b.phone INTO beautyName,beautyPhoneFROM beauty bWHERE beautyId = b.id;
END$
CALL myp2(7,@bName,@bPhone)$-- 3.创建存储过程,比较两个女神的生日,返回大小
DELIMITER $
CREATE PROCEDURE myp3(IN birth1 DATETIME,IN birth2 DATETIME,OUT result INT)
BEGINSELECT DATEDIFF(birth1,birth2) INTO result;
END$CALL myp3('1988-02-03','1987-12-30',@result)$
SELECT @result$-- 4.创建存储过程实现传入一个日期,格式化成xx年xx月xx日并返回
DELIMITER $
CREATE PROCEDURE myp3(IN mydate DATETIME,OUT strDate VARCHAR(50))
BEGINSELECT DATE_FORMAT(mydate,'%y年%m月%d日') INTO strDate;
END $
CALL myp3(NOW(),@str)$
SELECT @str$

三、函数

3.1  基本介绍

-- 函数
/*
含义1.类似于java中的方法
优势1.提高代码重用性2.减少了编译次数和服务器的连接次数
函数与存储过程的比较1.存储过程可以0个返回,也可以多个返回,适合做批量插入、更新2.函数有且仅有一个返回,适合处理数据,然后返回结果创建
CREATE FUNCTION 函数名(参数列表) returns 返回类型
begin函数体
end调用
select 函数名(参数列表)查看
show create function 函数名;删除
drop function 函数名;注意1.参数列表1.参数名和参数类型2.函数体1.必有retrun语句2.return语句的位置任意,建议放最后3.函数体中只有一句话,则可省略begin end4.使用delimiter设置结束标记
*/

3.2  函数的创建

-- 1.返回公司的员工个数(无参)
DELIMITER $
CREATE FUNCTION myf1() RETURNS INT
BEGINDECLARE result INT DEFAULT 0;SELECT COUNT(*) INTO resultFROM employees;RETURN result;
END$
SELECT myf1()$-- 2.根据员工名,返回他的工资(有参有返回)
DELIMITER $
CREATE FUNCTION myf2(lastname VARCHAR(20)) RETURNS DOUBLE
BEGINSET @sal = 0;-- 定义用户变量SELECT salary INTO @salFROM employeesWHERE last_name = lastname;RETURN @sal;
END$
SELECT myf2('Kochhar')$-- 3.根据部门名,返回该部门的平均工资
DELIMITER $
CREATE FUNCTION myf3(deptName VARCHAR(20)) RETURNS DOUBLE
BEGINDECLARE sal DOUBLE;SELECT AVG(salary) INTO salFROM employees eJOIN departments d ON e.department_id = d.department_idWHERE d.department_name = deptName;RETURN sal;
END$
SELECT myf3('IT')$

3.3  函数的查看

-- 4.查看函数
SHOW CREATE FUNCTION myf3;

3.4  函数的删除

-- 5.删除函数
DROP FUNCTION myf3;

四、流程控制结构

4.1  分支结构

-- 一、分支结构
/*
if函数
1.语法IF(表达式1,表达式2,表达式3)
2.执行顺序若表达式1成立,则返回表达式2的值,否则返回表达式3的值case结构1.等值判断(比如号码匹配)case 变量|表达式|字段when 要判断的值 then 返回的值1或语句1;when 要判断的值 then 返回的值2或语句2;...else 要返回的值n或语句nend case;2.区间判断(比如工资等级)casewhen 要判断的条件1 then 返回的值1或语句1;when 要判断的条件2 then 返回的值2或语句2;...else 要返回的值n或语句nend case
特点1.作为表达式,可以放在任何地方2.作为独立的语句,只能放在begin end中if结构
1.语法if       条件1 then 语句1;elseif  条件2 then 语句2;...[else 语句n;]end if;
2.应用只能在begin end中
*/
-- 1.创建存储过程,根据传入的成绩,显示等级
DELIMITER $
CREATE PROCEDURE test_case(IN score INT)
BEGINCASEWHEN score >= 90 AND score <= 100 THEN SELECT 'A';WHEN score >= 80 THEN SELECT 'B';WHEN score >= 60 THEN SELECT 'C';ELSE SELECT 'D';END CASE;
END$
CALL test_case(95)$-- 2.创建存储过程,根据传入的成绩,返回等级
DELIMITER $
CREATE FUNCTION test_if(score INT) RETURNS CHAR
BEGINIF score >= 90 AND score <= 100 THEN RETURN 'A';ELSEIF score >= 80 THEN RETURN 'B';ELSEIF score >= 60 THEN RETURN 'C';ELSE RETURN 'D';END IF;
END$

4.2  循环结构

-- 流程控制结构
/*
循环结构
1.分类whilelooprepeat
2.循环控制iterate,类似于continueleave,类似于br
*/-- 1.while
/*
语法[标签:]while 循环条件 do循环体;end while [标签];
*/-- 2.loop
/*
语法[标签:]loop循环体end loop [标签];
应用1.模拟简单的死循环
*/-- 3.repeat
/*
语法[标签:]repeat循环体;until 循环结束条件end repeat [标签];
*/-- 1.根据次数插入到admin表中多条记录
DELIMITER $
CREATE PROCEDURE pro_while1(IN insertCount INT)
BEGINDECLARE i INT DEFAULT 1;WHILE i <= insertCount DOINSERT INTO admin(username,`password`)VALUES(CONCAT('Rose',i),'666');SET i = i+1;END WHILE;
END$
CALL pro_while1(100)$
DROP PROCEDURE pro_while1;-- 2.根据次数插入到admin表中多条记录,如果次数大于20则停止(利用leave)
TRUNCATE TABLE admin;
SELECT * FROM admin;DELIMITER $
CREATE PROCEDURE pro_while1(IN insertCount INT)
BEGINDECLARE i INT DEFAULT 1;tag:WHILE i <= insertCount DOINSERT INTO admin(username,`password`)VALUES(CONCAT('Rose',i),'666');IF i >= 20 THEN LEAVE tag;END IF;SET i = i+1;END WHILE tag;
END$
CALL pro_while1(100)$
DROP PROCEDURE pro_while1;-- 3.根据次数插入到admin表中多条记录,只插入偶数次(利用iterate)
DELIMITER $
CREATE PROCEDURE pro_while1(IN insertCount INT)
BEGINDECLARE i INT DEFAULT 1;tag:WHILE i <= insertCount DOSET i = i+1;IF MOD(i,2)!=0 THEN ITERATE tag;END IF;INSERT INTO admin(username,`password`)VALUES(CONCAT('Rose',i),'666');END WHILE tag;
END$
CALL pro_while1(100)$

mysql基础——变量、存储过程和函数相关推荐

  1. mysql 存储过程 sql变量_SQL基础-变量 存储过程和函数

    一.变量 1.系统变量:全局变量.会话变量 说明:由系统提供,属于服务器层面.如果是全局级别,则需要加 global,如果是会话级别,则需加 session,如果不写,则默认 session.全局变量 ...

  2. mysql用函数调用存储过程_mysql 函数 调用 存储过程

    Mysql高级之存储过程 原文: Mysql高级之存储过程 概念类似于函数,就是把一段代码封装起来,当要执行这一段代码的时候,可以通过调用该存储过程来实现.在封装的语句体里面,可以用if/else,  ...

  3. mysql高级知识(linux安装mysql+索引+视图+存储过程和函数+触发器)

    一.linux系统安装Mysql 1.mysql安装包: MySQL :: Download MySQL Community Server 2.mysql安装 linux安装在vmware(虚拟机)上 ...

  4. mysql中的存储过程和函数

     1.创建存储过程 语法格式为 create procedure sp_name ([proc_parameter])[charateristics -] routine_body proc_pa ...

  5. MySQL 基础 ———— 变量

    一.MySQL系统变量 系统变量是由系统提供,属于服务器层面. 系统变量分为:全局变量和会话变量. 全局变量一般要加 GLOBAL 关键字,例如在<MySQL 基础 ----事务与隔离级别总结& ...

  6. MySQL表/视图/存储过程and函数/触发器/事件与数据库之间的关系

    mysql中的数据库包含表.视图.存储过程and函数.触发器.以及事件. 数据库: 数据库是存放数据的仓库.数据库中的数据不是直接存在数据库中,而是存在数据库的表中 表(table): 表是数据库中存 ...

  7. MySQL基础篇:单行函数

    概述 MySQL数据库提供了很多函数包括: 数学函数 字符串函数 日期和时间函数 条件判断函数 流程控制函数 系统信息函数 加密函数 格式化函数 数学函数 函数名称 函数说明 ABS(x) 返回x的绝 ...

  8. 数据库基础知识——存储过程和函数

    文章目录 1.存储过程 1.1 创建存储过程 1.2 调用存储过程 1.3 删除存储过程 1.4 查看存储过程 2.函数 2.1 创建函数 2.2 调用函数 2.3 函数的删除和查看 2.4 函数和存 ...

  9. mysql存储过程结构体_八、mysql视图、存储过程、函数以及时间调度器

    1.create or replace view emp_view as select * fromt4 ;给t4表创建一个名为emp_view的视图2.drop viewemp_view 删除视图= ...

最新文章

  1. WPF入门教程系列九——布局之DockPanel与ViewBox(四)
  2. 推荐系统实践整体化总结
  3. 反序列化对象列表发生异常_通过反序列化漏洞,黑客能做什么呢?
  4. html打开自动点击,如何把一段JS点击触发改为页面打开后就自动触发?
  5. 阿里安全的“自动逆向机器人”TimePlayer 究竟是什么
  6. 笔记本触摸板没反应,且设置里没有触摸板选项
  7. 三泰串口卡linux驱动,工业多串口卡.pdf
  8. Python:实现通过 isbn 搜索书籍算法(附完整源码)
  9. 姿态估计(人体关键点检测)之CPN
  10. 【重识云原生】第六章容器6.3.1节——K8S核心组件总述
  11. 计算机病毒结构及技术分析
  12. 华硕主板Z97-C无法识别三星 M.2 NVME固态硬盘的解决方案
  13. java 的德鲁伊连接池_德鲁伊连接池-Druid
  14. 正则表达式之数字验证
  15. 上班族保护颈椎有诀窍
  16. MAC地址修改,注册表版
  17. Invalidate()函数
  18. 量子纠缠在量子计算机中的作用,量子计算机的强大,为什么需要量子纠缠
  19. 并查集的使用,臭虫同性恋问题
  20. org.springframework.data.mongodb.UncategorizedMongoDbException

热门文章

  1. 整数边界对齐方式_c中结构体边界对齐(转)
  2. Java常见报错--学习中的报错信息整理收集
  3. OpenCV系列之理解K近邻 | 五十三
  4. 【译】MySQL挑战:建立10万连接
  5. 2022-4-12 Leetcode 452.用最少数量的箭引爆气球
  6. 计算机网络性能指标:速率,带宽,吞吐量
  7. 基于jQuery实现幻灯片切换效果
  8. 秋招被问mysql左连接和右连接的区别?
  9. 免费压缩GIF制作工具【ezgif】——非常适合大家压缩动图,斗图,制作微信表情包,写文章,写段子等专用
  10. python if函数两个并列条件怎么用_if函数中多个并列的条件怎么定义?