MySQL存儲(chǔ)過程中變量的定義以及應(yīng)用詳解
前言
在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)變量的語法格式
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)變量值的語法格式
兩種方式可以設(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.用戶自定義變量的語法格式
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ǔ)過程中定義的局部變量
局部變量是在存儲(chǔ)過程中聲明的,僅應(yīng)用于存儲(chǔ)過程的BEGIN…END這個(gè)范圍中,局部變量需要通過DECLARE關(guān)鍵字聲明,聲明完成后再通過SET或者SELECT進(jìn)行賦值,局部變量和用戶自定義變量的賦值方式是一模一樣的。
3.1.局部變量的語法格式
1)聲明變量
DECLARE 變量名 變量值的類型 [DEFAULT 默認(rèn)值] 變量值的類型就是數(shù)據(jù)庫(kù)字段的類型,例如:INT BIGINT CHAR VARCHAR DATE TIME等等。
2)變量賦值
SET 變量名 = 變量值 SET 變量名 := 變量值 SELECT 字段名 INTO 變量名 FROM 表名;
3.2.局部變量的應(yīng)用案例
創(chuàng)建一個(gè)存儲(chǔ)過程,在里面定義兩個(gè)局部變量,分別用SET和SELECT賦值,最后查看變量的內(nèi)容。
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)
補(bǔ)充知識(shí):變量的賦值
同程序里面一樣,定義了變量,我們也需要在程序中對(duì)他賦值,下面是示例代碼:
DECLARE total_count INT DEFAULT 0 SET total_count = 10;
可以看到進(jìn)行賦值時(shí)候需要在前面加上:SET 這個(gè)關(guān)鍵字。
當(dāng)然由于存儲(chǔ)過程的特殊性(用于數(shù)據(jù)庫(kù)的數(shù)據(jù)操作),所以除了SET這種賦值方法,還可以通過SELECT INTO語句將返回的值賦給變量:
DECLARE total_products INT DEFAULT 0 SELECT COUNT(*) INTO total_products FROM products
看到這里把products的記錄數(shù)賦給了total_products這個(gè)變量。所以如果上面我們表格內(nèi)是3個(gè)記錄的話,這里total_products就是等于3了
總結(jié)
到此這篇關(guān)于MySQL存儲(chǔ)過程中變量的定義以及應(yīng)用詳解的文章就介紹到這了,更多相關(guān)MySQL存儲(chǔ)過程變量應(yīng)用內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
insert...on?duplicate?key?update語法詳解
本文主要介紹了insert...on?duplicate?key?update語法詳解,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2023-01-01MySQL中存儲(chǔ)時(shí)間的最佳實(shí)踐指南
這篇文章主要給大家介紹了關(guān)于MySQL中存儲(chǔ)時(shí)間的最佳實(shí)踐,文中詳細(xì)介紹了哪種存儲(chǔ)時(shí)間的方式更好,對(duì)大家學(xué)習(xí)或者使用mysql具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2021-07-07MySQL大內(nèi)存配置方案 如my-medium.ini、my-huge.ini等
這篇文章主要介紹了MySQL大內(nèi)存配置方案 如my-medium.ini、my-huge.ini等,經(jīng)測(cè)試確實(shí)不錯(cuò),訪問mysql速度快了很多2014-08-0864位CentOs7源碼安裝mysql-5.6.35過程分享
本文給大家分享的是在64位CentOs7系統(tǒng)中使用源碼安裝mysql-5.6.35的詳細(xì)過程,非常的細(xì)致,有需要的小伙伴可以參考下2017-02-02詳解MySQL單實(shí)例和多實(shí)例啟動(dòng)腳本
這篇文章主要介紹了MySQL單實(shí)例和多實(shí)例啟動(dòng)腳本,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2023-08-08windows下安裝mysql8.0.18的教程(社區(qū)版)
本文章簡(jiǎn)單介紹一下mysql在windows下的安裝方式,主要介紹了mysql社區(qū)版8.0.18版本,本文給大家介紹的非常詳細(xì),需要的朋友參考下吧2020-01-01