MySQL中的变量可以分为:系统变量和自定义变量。系统变量又可以分为:全局变量、会话变量。自定义变量可以分为:用户变量、局部变量
10.1 系统变量
系统变量由系统提供,不是用户定义,属于服务器层面的语法。
实例1:查看所有的系统变量
SHOW GLOBAL|【SESSION】 VARIABLES;
什么关键字都不写默认是绘画变量,只在一次会话中(一次连接) 全局变量在别的连接中一样起作用,SESSION 变量只在此次会话起作用
实例2:查看满足条件的部分系统变量
SHOW GLOBAL|【SESSION】 VARIABLES LIKE VARIABLES LIKE '%char%';
实例3:查看某个指定的系统变量的值
SELECT @@global|【SESSION】.系统变量;
实例4:为某个系统变量赋值
SET GLOBAL|【SESSION】 系统变量名-值;# 或者SET @@global|【SESSION】.系统变量名 = 值;
10.2 用户自定义变量
变量是用户自定义的,不是系统自带的。
作用域:针对当前会话(连接)
实例1:声明并初始化
SET @用户变量名 = 值;SET @用户变量名 := 值;SELECT @用户变量名:=值;
实例2:赋值(更新用户变量的值)
SET @用户变量名 = 值;SET @用户变量名 := 值;SELECT @用户变量名:=值;
实例3:用户变量为弱类型,可以赋各种类型的值
SET @woaini = 'lyx';SET @woaini = 100;
实例4:赋值的另一种方式
SELECT COUNT(*) INTO @count FROM employees;
10.3 存储过程和函数
存储过程(Stored Procedure)是在大型数据库系统中,一组为了完成特定功能的 SQL 语句集,它存储在数据库中,一次编译后永久有效,用户通过指定存储过程的名字并给出参数(如果该存储过程带有参数)来执行它。
意思就是把编译好的 sql 存储下来,而不是直接用 sql 去执行,省去了编译消耗的性能。
优点:
- 提高代码的重用性
- 简化操作
- 减少了编译次数和数据库连接的带宽,提高了效率
创建存储过程:
DELIMITER 结束标记CREATE PROCEDURE 存储过程名(参数列表)BEGIN存储过程体(一组合法的SQL语句)END 结束符号
注意:
- 参数列表包含 3 部分
- 参数模型
- 参数名
- 参数类型
- 举例:IN stuname VARCHAR(20)
- 参数模型包括
- IN:该参数可以作为输入,也就是该彩塑需要条用方传入值
- OUT:该参数可以作为输出,也就是该参数可以作为返回值
- INOUT:该参数既可以作为输入,又可以作为输出
- 如果存储过程体仅仅只有一句话,BEGIN END 可以省略。
- 由于 MySQL 默认情况下在遇到分号时会结束,所以需要修改结束标记。在MySQL中可以使用 DELIMITER 结束标记
- delimiter 结束标记
- 调用语法
- CALL 存储过程(实参列表)
实例1:插入到 admin 表中五条记录(空参列表)
DELIMITER $CREATE PROCEDURE myp1()BEGININSERT INTO admin(username,`password`)VALUES('lyx','777'),('lzh','999'),('lzh','999'),('lzh','999'),('lzh','999');END $# 调用CALL myp1()$
DELIMITER 执行之后,就会将结束符定义为 $ 符号,但是 navicat 会自动转回分号,只有在命令行的时候才会在修改后,将所有的 sql 语句的结束符号都为 $
