MySQL中的变量可以分为:系统变量和自定义变量。系统变量又可以分为:全局变量、会话变量。自定义变量可以分为:用户变量、局部变量

10.1 系统变量

系统变量由系统提供,不是用户定义,属于服务器层面的语法。
实例1:查看所有的系统变量

  1. SHOW GLOBAL|【SESSION VARIABLES;

什么关键字都不写默认是绘画变量,只在一次会话中(一次连接) 全局变量在别的连接中一样起作用,SESSION 变量只在此次会话起作用

实例2:查看满足条件的部分系统变量

  1. SHOW GLOBAL|【SESSION VARIABLES LIKE VARIABLES LIKE '%char%';

实例3:查看某个指定的系统变量的值

  1. SELECT @@global|【SESSION】.系统变量;

实例4:为某个系统变量赋值

  1. SET GLOBAL|【SESSION 系统变量名-值;
  2. # 或者
  3. SET @@global|【SESSION】.系统变量名 = 值;

10.2 用户自定义变量


变量是用户自定义的,不是系统自带的。
作用域:针对当前会话(连接)

实例1:声明并初始化

  1. SET @用户变量名 = 值;
  2. SET @用户变量名 := 值;
  3. SELECT @用户变量名:=值;

实例2:赋值(更新用户变量的值)

  1. SET @用户变量名 = 值;
  2. SET @用户变量名 := 值;
  3. SELECT @用户变量名:=值;

实例3:用户变量为弱类型,可以赋各种类型的值

  1. SET @woaini = 'lyx';
  2. SET @woaini = 100;

实例4:赋值的另一种方式

  1. SELECT COUNT(*) INTO @count FROM employees;

10.3 存储过程和函数

存储过程(Stored Procedure)是在大型数据库系统中,一组为了完成特定功能的 SQL 语句集,它存储在数据库中,一次编译后永久有效,用户通过指定存储过程的名字并给出参数(如果该存储过程带有参数)来执行它。

意思就是把编译好的 sql 存储下来,而不是直接用 sql 去执行,省去了编译消耗的性能。

优点:

  1. 提高代码的重用性
  2. 简化操作
  3. 减少了编译次数和数据库连接的带宽,提高了效率

创建存储过程:

  1. DELIMITER 结束标记
  2. CREATE PROCEDURE 存储过程名(参数列表)
  3. BEGIN
  4. 存储过程体(一组合法的SQL语句)
  5. END 结束符号

注意:

  1. 参数列表包含 3 部分
    1. 参数模型
    2. 参数名
    3. 参数类型
  2. 举例:IN stuname VARCHAR(20)
  3. 参数模型包括
    1. IN:该参数可以作为输入,也就是该彩塑需要条用方传入值
    2. OUT:该参数可以作为输出,也就是该参数可以作为返回值
    3. INOUT:该参数既可以作为输入,又可以作为输出
  4. 如果存储过程体仅仅只有一句话,BEGIN END 可以省略。
  5. 由于 MySQL 默认情况下在遇到分号时会结束,所以需要修改结束标记。在MySQL中可以使用 DELIMITER 结束标记
    1. delimiter 结束标记
  6. 调用语法
    1. CALL 存储过程(实参列表)

实例1:插入到 admin 表中五条记录(空参列表)

  1. DELIMITER $
  2. CREATE PROCEDURE myp1()
  3. BEGIN
  4. INSERT INTO admin(username,`password`)
  5. VALUES('lyx','777'),('lzh','999'),('lzh','999'),('lzh','999'),('lzh','999');
  6. END $
  7. # 调用
  8. CALL myp1()$

DELIMITER 执行之后,就会将结束符定义为 $ 符号,但是 navicat 会自动转回分号,只有在命令行的时候才会在修改后,将所有的 sql 语句的结束符号都为 $