在MySQL數(shù)據(jù)庫(kù)種分為三種類型的變量,分別是系統(tǒng)變量、用戶自定義的變量、局部變量。
1.系統(tǒng)變量
系統(tǒng)變量是由MySQL數(shù)據(jù)庫(kù)提供的系統(tǒng)變量,屬于服務(wù)層面的系統(tǒng)變量,系統(tǒng)變量在使用時(shí)的級(jí)別又分為兩種:
-
全局變量(global):全局變量針對(duì)所有的會(huì)話生效,但是當(dāng)重啟MySQL后,修改的系統(tǒng)變量值將會(huì)失效,若想永久修改變量的值,可以在MySQL的配置文件中聲明。
-
局部變量(session):會(huì)話變量只針對(duì)與單個(gè)會(huì)話生效,到另一個(gè)會(huì)話窗口將失效。
系統(tǒng)變量的兩種使用級(jí)別可以在使用變量時(shí)指定使用哪一個(gè)級(jí)別,如果不明確指定系統(tǒng)變量的級(jí)別,默認(rèn)是session。
1.1.查看系統(tǒng)變量的語(yǔ)法格式
1)查看所有的系統(tǒng)變量
SHOW [ SESSION | GLOBAL ] VARIABLES
2)查找某一個(gè)系統(tǒng)變量
SHOW [ SESSION | GLOBAL ] VARIABLES LIKE '變量名'
3)查看指定變量的值
SELECT @@[SESSION | GLOBAL].變量名
1.2.設(shè)置系統(tǒng)變量值的語(yǔ)法格式
兩種方式可以設(shè)置變量的值。
SET [ SESSION | GLOBAL ] 系統(tǒng)變量名 = 值
SET @@[SESSION | GLOBAL].系統(tǒng)變量名 = 值
1.3.系統(tǒng)變量使用案例
1)查看所有的系統(tǒng)變量
mysql> show variables;
2)查看名稱包含auto的系統(tǒng)變量
左側(cè)是變量名,右側(cè)是變量值。
mysql> show variables like '%auto%';
+----------------------------------------------+-------+
| Variable_name | Value |
+----------------------------------------------+-------+
| auto_generate_certs | ON |
| auto_increment_increment | 1 |
| auto_increment_offset | 1 |
| autocommit | ON |
| automatic_sp_privileges | ON |
| caching_sha2_password_auto_generate_rsa_keys | ON |
| innodb_autoextend_increment | 64 |
| innodb_autoinc_lock_mode | 2 |
| innodb_stats_auto_recalc | ON |
| sha256_password_auto_generate_rsa_keys | ON |
| sql_auto_is_null | OFF |
+----------------------------------------------+-------+
11 rows in set (0.00 sec)
3)查看指定變量的變量值
mysql> select @@session.autocommit;
+----------------------+
| @@session.autocommit |
+----------------------+
| 1 |
+----------------------+
1 row in set (0.00 sec)
4)修改系統(tǒng)變量的值
mysql> set @@session.autocommit = 0;
Query OK, 0 rows affected (0.02 sec)
或者
mysql> set session autocommit = 0;
Query OK, 0 rows affected (0.00 sec)
2.用戶自定義的變量
在MySQL數(shù)據(jù)庫(kù)中,還支持用戶根據(jù)自己的需要,自定義的環(huán)境變量,用戶自定義的變量不需要提前聲明,直接賦值使用即可,用戶自定義的變量?jī)H應(yīng)用于當(dāng)前的會(huì)話連接。
用戶自定義的變量是不需要聲明或者初始化的,如果沒有賦值直接使用自定義的變量名,變量值則為NULL。
2.1.用戶自定義變量的語(yǔ)法格式
1)定義變量并賦值
方式一,使用SET直接定義變量并賦值。
SET @變量名1 = 變量值1
SET @變量名1 = 變量值1 , @變量名2 = 變量值2
SET @變量名1 := 變量值1
SET @變量名1 := 變量值1 , @變量名2 := 變量值2
建議使用:=的方式為變量賦值,因?yàn)樵谧兞窟\(yùn)算時(shí)=符號(hào)也是運(yùn)算符號(hào)。
方式二,由于用戶自定義的變量不需要聲明,可以使用SELECT直接定義變量和賦值。
SELECT @變量名1 := 變量值1 , @變量名2 := 變量值2
方式三,將SQL的查詢結(jié)果賦值給變量。
SELECT 字段名 INTO @變量名 FROM 表名
將某個(gè)表的某個(gè)字段的結(jié)果賦值給變量。
2)使用變量
SELECT @變量名1
2.2.用戶自定義變量的案例
1)使用set定義變量并賦值
1.一次性定義一個(gè)變量
mysql> set @name = 'jiangxl';
或者
mysql> set @username := 'wang';
2.一次性定義多個(gè)變量
mysql> set @username = 'wang' , @userid = '1';
或者
mysql> set @age := '19' , @book := 'linux';
2)使用select定義變量并賦值
使用select定義完變量賦完值之后就可以看到變量的值。
1.一次性定義一個(gè)變量
mysql> select @myzhiwu := 'devops_linux';
+----------------------------+
| @myzhiwu := 'devops_linux' |
+----------------------------+
| devops_linux |
+----------------------------+
2.一次性定義多個(gè)變量
mysql> select @myzhiwu := 'devops_linux' , @myage := '25';
+----------------------------+----------------+
| @myzhiwu := 'devops_linux' | @myage := '25' |
+----------------------------+----------------+
| devops_linux | 25 |
+----------------------------+----------------+
3)將ryxxb的總數(shù)賦值給變量
mysql> select count(*) into @mycount from ryxxb;
4)查看變量的值
查詢各個(gè)定義的變量所對(duì)應(yīng)的值。
mysql> select @name,@username,@userid,@age,@book,@myzhiwu,@myage;
+---------+-----------+---------+------+-------+--------------+--------+
| @name | @username | @userid | @age | @book | @myzhiwu | @myage |
+---------+-----------+---------+------+-------+--------------+--------+
| jiangxl | wang | 1 | 19 | linux | devops_linux | 25 |
+---------+-----------+---------+------+-------+--------------+--------+
3.可以在存儲(chǔ)過(guò)程中定義的局部變量
局部變量是在存儲(chǔ)過(guò)程中聲明的,僅應(yīng)用于存儲(chǔ)過(guò)程的BEGIN…END這個(gè)范圍中,局部變量需要通過(guò)DECLARE關(guān)鍵字聲明,聲明完成后再通過(guò)SET或者SELECT進(jìn)行賦值,局部變量和用戶自定義變量的賦值方式是一模一樣的。
3.1.局部變量的語(yǔ)法格式
1)聲明變量
DECLARE 變量名 變量值的類型 [DEFAULT 默認(rèn)值]
變量值的類型就是數(shù)據(jù)庫(kù)字段的類型,例如:INT BIGINT CHAR VARCHAR DATE TIME等等。
2)變量賦值文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-455936.html
SET 變量名 = 變量值
SET 變量名 := 變量值
SELECT 字段名 INTO 變量名 FROM 表名;
3.2.局部變量的應(yīng)用案例
創(chuàng)建一個(gè)存儲(chǔ)過(guò)程,在里面定義兩個(gè)局部變量,分別用SET和SELECT賦值,最后查看變量的內(nèi)容。文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-455936.html
1.創(chuàng)建視圖
create procedure proc_2()
begin
declare ryxxb_count int default 0; #聲明ryxxb表總數(shù)的變量,類型為int,默認(rèn)值為0
declare username varchar(10); #聲明username變量,類型為varchar
set username := 'jiangxl'; #賦值username變量
select count(*) into ryxxb_count from ryxxb; #將ryxxb表的總數(shù)據(jù)量賦值為ryxxb_count變量
select ryxxb_count,username; #查詢變量的值
end;
2.調(diào)用視圖
mysql> call proc_2();
+-------------+----------+
| ryxxb_count | username |
+-------------+----------+
| 22 | jiangxl |
+-------------+----------+
1 row in set (0.00 sec)
到了這里,關(guān)于第62講:MySQL存儲(chǔ)過(guò)程中變量的定義及應(yīng)用的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!