天天看點

MySQL資料庫(28):變量 variables

變量 variables

MySQL本質是一種程式設計語言

1、系統變量

對所有使用者用戶端都有效

1.1、檢視系統變量

1、方式一

show variables [like 'pattern'];      

示例

mysql> show variables like 'autocommit';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| autocommit    | ON    |
+---------------+-------+      

2、方式二:

使用select查詢變量的資料值

select @@變量名;      

示例

select @@autocommit;
+--------------+
| @@autocommit |
+--------------+
|            1 |
+--------------+      

1.2、修改系統變量

1、局部修改(會話級别)

-- 隻針對目前用戶端當次連接配接有效
set 變量名 = 值;

-- eg:
set autocommit = 'off';
show variables like 'autocommit';      

2、全局修改

-- 所有用戶端,都有效
set global 變量名 = 值;
set @@global.變量名 = 值;

-- eg:
set global autocommit = 'off';      

注意,全局修改之後,重新開機用戶端生效

2、會話變量

也稱為使用者變量,設定的變量,隻針對目前使用者使用的用戶端生效

-- 定義使用者變量
set @變量名 = 值;

set @age = 23;      

mysql中沒有比較符号 == ,使用的是 =;

為了避免分不清是指派還是比較,指派使用​​

​:=​

set @變量名 := 值;

set @name := 'Tom';      

mysql允許将資料從表中取出存儲到變量中,隻能是一行資料

-- 1、指派且檢視指派過程
select @變量1 := 字段1, @變量2 := 字段2 from 表 where 條件

select @name := name, @age := age from my_student limit 1;
+---------------+-------------+
| @name := name | @age := age |
+---------------+-------------+
| 劉備          |          18 |
+---------------+-------------+

--- 2、隻指派不看過程
select 字段1, 字段2 from 表 where 條件 into @變量1, @變量2;
select name, age from my_student limit 1 into @name, @age;      

檢視變量

select @變量名

mysql> select @name, @age;
+--------+------+
| @name  | @age |
+--------+------+
| 劉備   |   18 |
+--------+------+      

3、局部變量

作用範圍在begin到end語句塊之間,在該語句塊裡設定的變量

  • declare語句用于定義局部變量
  • 局部變量 declare語句出現在begin到end語句塊之間

聲明文法

declare 變量名 資料類型 [屬性];      

4、變量作用域

變量能夠使用的區域範圍

4.1、局部作用域

declare 關鍵字聲明 (結構體中使用:函數/存儲過程/觸發器)

declare關鍵字聲明的變量沒有任何符号修飾,就是普通字元串,如果再外部通路該變量,系統會自動認為是字段

4.2、會話作用域

使用者定義的,使用@符号定義的變量,使用set關鍵字

會話作用域,當次連接配接有效隻要再本連接配接中,任何地方都可以使用(可以在結構内容,也可以跨庫)

會話變量可以再函數内部使用

set @name = '張三';

create function get_name() returns char(4)
return @name;

select get_name();
+------------+
| get_name() |
+------------+
| 張三       |
+------------+      

會話變量可以跨庫

use mydatabase2;

mysql> select @name;
+--------+
| @name  |
+--------+
| 張三   |
+--------+      

4.3、全局作用域

set global 變量名 = 值;
set @@global.變量名 = 值;