数据库原理与应用 第 15 章 · 第三节
课程第 15 章第三节 变量三要素会话变量SET 赋值查出来赋局部变量系统变量查系统变量 版式
第 15 章 存储过程与函数 · 第三节

三种变量

本 节 知 识 点
  1. 14变量名、变量值、数据类型
  2. 15一个 @,只归你这条连接管
  3. 16会话变量不用声明,直接赋值就有
  4. 17值要查出来的时候用 INTO
  5. 18不带 @,只活在语句块里
  6. 19两个 @,是服务器自己的开关
  7. 20SHOW VARIABLES 和 SELECT @@
14
第 15 章 · 第三节

变量名、变量值、数据类型

变量是个容器,装数据,也参与运算。

第 14 页课件

试一试三种变量各占一块地盘

点一行,看这种变量归谁管、活多久
写法叫什么活到什么时候

重 点

MySQL 有三种变量:用户会话变量、局部变量、系统变量,写法一眼能分。

记牢它看 @ 认变量

  1. 一个 @ 是会话
  2. 不带 @ 是局部
  3. 两个 @ 是系统
15
第 15 章 · 第三节

一个 @,只归你这条连接管

别人连进来看不到,你断开它就没了。

第 15 页课件

重 点

用户会话变量属于特定会话,生命周期就是这次连接从建立到断开。

打个比方

开会时发到你手上的便签,散会就作废,隔壁会议室的人也看不见。

想一想

两个人同时用同一个账号连进来,@n 会打架吗?

16
第 15 章 · 第三节

会话变量不用声明,直接赋值就有

定义时也不用写数据类型。

第 16 页课件

重 点

SET @a=100, @b=200 一句就能定义两个,等号写成 := 也一样。

知道更多

不用声明类型,是因为会话变量按赋进去的值自己定类型。

上机做

上机一第 4 题 三种变量各试一遍

17
第 15 章 · 第三节

值要查出来的时候用 INTO

SELECT COUNT(*) INTO @n FROM s。

第 17 页课件

分清楚两种赋值

写法什么时候用
SET @n=1值是现成的
SELECT INTO值要查出来

重 点

INTO 后面接几个变量,前面就得选出几列,多一列少一列都报 1222。

想一想

查出来一行都没有,变量会变成 NULL 吗?

18
第 15 章 · 第三节

不带 @,只活在语句块里

必须先 DECLARE,而且只能写在最前面。

第 18 页课件

重 点

DECLARE 只能出现在 BEGIN 之后、其他语句之前,写在语句后面报 1064。

知道更多

忘了 DECLARE 更麻烦:SET 会把这个名字当系统变量找,报的是 1193。

上机做

上机一第 5 题 两种写法各错一次

想一想

为什么规定声明必须写在最前面?

19
第 15 章 · 第三节

两个 @,是服务器自己的开关

分全局和会话两级,多数只读。

第 19 页课件

关键术语

全局变量GLOBAL
影响整台服务器,重启后回默认值
会话变量SESSION
新连接建立时从全局复制一份

重 点

全局的改了影响所有人,会话的改了只影响自己这条连接。

知道更多

第 9 章那个隔离级别、第 10 章那个 log_bin,都是系统变量。

20
第 15 章 · 第三节

SHOW VARIABLES 和 SELECT @@

想知道服务器什么脾气,问它自己。

第 20 页课件

记牢它三种查法

  1. SHOW VARIABLES
  2. 加 LIKE 筛一筛
  3. SELECT @@变量名

重 点

SELECT @@version 看版本,加 LIKE 能把上百个变量筛成几个。

练一练

在存储过程中声明一个局部变量 total,初值 0,写法正确的是?
  1. ASET total = 0;
  2. BDECLARE @total INT DEFAULT 0;
  3. CDECLARE total INT DEFAULT 0;
  4. DVAR total INT = 0;
答案 C

局部变量用 DECLARE 声明,名字前不加 @。加了 @ 就成了会话变量,语法不对。

保山学院·人工智能教研室·曹鼎鼎