第 15 章 · 第三节
变量名、变量值、数据类型
变量是个容器,装数据,也参与运算。

试一试三种变量各占一块地盘
| 写法 | 叫什么 | 活到什么时候 |
|---|
重 点
MySQL 有三种变量:用户会话变量、局部变量、系统变量,写法一眼能分。
记牢它看 @ 认变量
- 一个 @ 是会话
- 不带 @ 是局部
- 两个 @ 是系统
变量是个容器,装数据,也参与运算。

| 写法 | 叫什么 | 活到什么时候 |
|---|
MySQL 有三种变量:用户会话变量、局部变量、系统变量,写法一眼能分。
别人连进来看不到,你断开它就没了。

用户会话变量属于特定会话,生命周期就是这次连接从建立到断开。
开会时发到你手上的便签,散会就作废,隔壁会议室的人也看不见。
两个人同时用同一个账号连进来,@n 会打架吗?
定义时也不用写数据类型。

SELECT COUNT(*) INTO @n FROM s。

| 写法 | 什么时候用 |
|---|---|
| SET @n=1 | 值是现成的 |
| SELECT INTO | 值要查出来 |
INTO 后面接几个变量,前面就得选出几列,多一列少一列都报 1222。
查出来一行都没有,变量会变成 NULL 吗?
必须先 DECLARE,而且只能写在最前面。

DECLARE 只能出现在 BEGIN 之后、其他语句之前,写在语句后面报 1064。
忘了 DECLARE 更麻烦:SET 会把这个名字当系统变量找,报的是 1193。
为什么规定声明必须写在最前面?
分全局和会话两级,多数只读。

全局的改了影响所有人,会话的改了只影响自己这条连接。
第 9 章那个隔离级别、第 10 章那个 log_bin,都是系统变量。
想知道服务器什么脾气,问它自己。

SELECT @@version 看版本,加 LIKE 能把上百个变量筛成几个。
局部变量用 DECLARE 声明,名字前不加 @。加了 @ 就成了会话变量,语法不对。