国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

玩轉Mysql系列 - 第16篇:變量詳解

這篇具有很好參考價值的文章主要介紹了玩轉Mysql系列 - 第16篇:變量詳解。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

這是Mysql系列第16篇。

環(huán)境:mysql5.7.25,cmd命令中進行演示。

代碼中被[]包含的表示可選,|符號分開的表示可選其一。

我們在使用mysql的過程中,變量也會經常用到,比如查詢系統(tǒng)的配置,可以通過查看系統(tǒng)變量來了解,當我們需要修改系統(tǒng)的一些配置的時候,也可以通過修改系統(tǒng)變量的值來進行。

我們需要做一些批處理腳本的時候,可以使用自定義變量,來做到數(shù)據(jù)的復用。所以變量這塊也挺重要,希望大家能夠掌握。

本文內容

  • 詳解系統(tǒng)變量的使用

  • 詳解自定義變量的使用

變量分類

  • 系統(tǒng)變量

  • 自定義變量

系統(tǒng)變量

概念

系統(tǒng)變量由系統(tǒng)定義的,不是用戶定義的,屬于mysql服務器層面的。

系統(tǒng)變量分類
  • 全局變量

  • 會話變量

使用步驟
查看系統(tǒng)變量
//1.查看系統(tǒng)所有變量
show?[global?|?session]?variables;
//查看全局變量
show?global?variables;
//查看會話變量
show?session?variables;
show?variables;

上面使用了show關鍵字

查看滿足條件的系統(tǒng)變量

通過like模糊匹配指定的變量

//查看滿足條件的系統(tǒng)變量(like模糊匹配)
show?[global|session]?like?'%變量名%';

上面使用了show和like關鍵字。

查看指定的系統(tǒng)變量
//查看指定的系統(tǒng)變量的值
select?@@[global.|session.]系統(tǒng)變量名稱;

注意select@@關鍵字,global和session后面有個.符號。

賦值
//方式1
set?[global|session]?系統(tǒng)變量名=值;

//方式2
set?@@[global.|session.]系統(tǒng)變量名=值;

注意:

上面使用中介紹的,全局變量需要添加global關鍵字,會話變量需要添加session關鍵字,如果不寫,默認為session級別。

全局變量的使用中用到了@@關鍵字,后面會介紹自定義變量,自定義變量中使用了一個@符號,這點需要和全局變量區(qū)分一下。

全局變量

作用域

mysql服務器每次啟動都會為所有的系統(tǒng)變量設置初始值。

我們?yōu)橄到y(tǒng)變量賦值,針對所有會話(連接)有效,可以跨連接,但不能跨重啟,重啟之后,mysql服務器會再次為所有系統(tǒng)變量賦初始值。

示例
查看所有全局變量
/*查看所有全局變量*/
show?global?variables;
查看包含'tx'字符的變量
/*查看包含`tx`字符的變量*/
mysql>?show?global?variables?like?'%tx%';
+---------------+-----------------+
|?Variable_name?|?Value???????????|
+---------------+-----------------+
|?tx_isolation??|?REPEATABLE-READ?|
|?tx_read_only??|?OFF?????????????|
+---------------+-----------------+
2?rows?in?set,?1?warning?(0.00?sec)

/*查看指定名稱的系統(tǒng)變量的值,如查看事務默認自動提交設置*/
mysql>?select?@@global.autocommit;
+---------------------+
|?@@global.autocommit?|
+---------------------+
|???????????????????0?|
+---------------------+
1?row?in?set?(0.00?sec)
為某個變量賦值
/*為某個系統(tǒng)變量賦值*/
set?global?autocommit=0;
set?@@global.autocommit=1;
mysql>?set?global?autocommit=0;
Query?OK,?0?rows?affected?(0.00?sec)

mysql>?select?@@global.autocommit;
+---------------------+
|?@@global.autocommit?|
+---------------------+
|???????????????????0?|
+---------------------+
1?row?in?set?(0.00?sec)

mysql>?set?@@global.autocommit=1;
Query?OK,?0?rows?affected?(0.00?sec)

mysql>?select?@@global.autocommit;
+---------------------+
|?@@global.autocommit?|
+---------------------+
|???????????????????1?|
+---------------------+
1?row?in?set?(0.00?sec)

會話變量

作用域

針對當前會話(連接)有效,不能跨連接。

會話變量是在連接創(chuàng)建時由mysql自動給當前會話設置的變量。

示例
查看所有會話變量
/*①查看所有會話變量*/
show?session?variables;
查看滿足條件的會話變量
/*②查看滿足條件的步伐會話變量*/
/*查看包含`char`字符變量名的會話變量*/
show?session?variables?like?'%char%';
查看指定的會話變量的值
/*③查看指定的會話變量的值*/
/*查看事務默認自動提交的設置*/
select?@@autocommit;
select?@@session.autocommit;
/*查看事務隔離級別*/
select?@@tx_isolation;
select?@@session.tx_isolation;
為某個會話變量賦值
/*④為某個會話變量賦值*/
set?@@session.tx_isolation='read-uncommitted';
set?@@tx_isolation='read-committed';
set?session?tx_isolation='read-committed';
set?tx_isolation='read-committed';

效果:

mysql>?select?@@tx_isolation;
+----------------+
|?@@tx_isolation?|
+----------------+
|?READ-COMMITTED?|
+----------------+
1?row?in?set,?1?warning?(0.00?sec)

mysql>?set?tx_isolation='read-committed';
Query?OK,?0?rows?affected,?1?warning?(0.00?sec)

mysql>?select?@@tx_isolation;
+----------------+
|?@@tx_isolation?|
+----------------+
|?READ-COMMITTED?|
+----------------+
1?row?in?set,?1?warning?(0.00?sec)

自定義變量

概念

變量由用戶自定義的,而不是系統(tǒng)提供的。

使用
使用步驟:
1.?聲明
2.?賦值
3.?使用(查看、比較、運算)
分類
  • 用戶變量

  • 局部變量

用戶變量

作用域

針對當前會話(連接)有效,作用域同會話變量。

用戶變量可以在任何地方使用也就是既可以在begin end里面使用,也可以在他外面使用。

使用
聲明并初始化(要求聲明時必須初始化)
/*方式1*/
set?@變量名=值;
/*方式2*/
set?@變量名:=值;
/*方式3*/
select?@變量名:=值;

注意:

上面使用了@符合,而上面介紹全局變量使用了2個@符號,這點注意區(qū)分一下。

set中=號前面冒號是可選的,select方式=前面必須有冒號

賦值(更新變量的值)
/*方式1:這塊和變量的聲明一樣*/
set?@變量名=值;
set?@變量名:=值;
select?@變量名:=值;

/*方式2*/
select?字段?into?@變量名?from?表;

注意上面select的兩種方式。

使用
select?@變量名;
綜合示例
/*set方式創(chuàng)建變量并初始化*/
set?@username='路人甲java';
/*select?into方式創(chuàng)建變量*/
select?'javacode2018'?into?@gzh;
select?count(*)?into?@empcount?from?employees;

/*select?:=方式創(chuàng)建變量*/
select?@first_name:='路人甲Java',@email:='javacode2018@163.com';
/*使用變量*/
insert?into?employees?(first_name,email)?values?(@first_name,@email);

局部變量

作用域

declare用于定義局部變量變量,在存儲過程和函數(shù)中通過declare定義變量在begin…end中,且在語句之前。并且可以通過重復定義多個變量

declare變量的作用范圍同編程里面類似,在這里一般是在對應的begin和end之間。在end之后這個變量就沒有作用了,不能使用了。這個同編程一樣。

使用
聲明
declare?變量名?變量類型;
declare?變量名?變量類型?[default?默認值];
賦值
/*方式1*/
set?局部變量名=值;
set?局部變量名:=值;
select?局部變量名:=值;

/*方式2*/
select?字段?into?局部變量名?from?表;

注意:局部變量前面沒有@符號

使用(查看變量的值)
select?局部變量名;
示例
/*創(chuàng)建表test1*/
drop?table?IF?EXISTS?test1;
create?table?test1(a?int?PRIMARY?KEY,b?int);

/*聲明腳本的結束符為$$*/
DELIMITER?$$
DROP?PROCEDURE?IF?EXISTS?proc1;
CREATE?PROCEDURE?proc1()
BEGIN
??/*聲明了一個局部變量*/
??DECLARE?v_a?int;

??select?ifnull(max(a),0)+1?into?v_a?from?test1;
??select?@v_b:=v_a*2;
??insert?into?test1(a,b)?select?v_a,@v_b;
end?$$

/*聲明腳本的結束符為;*/
DELIMITER?;

/*調用存儲過程*/
call?proc1();
/*查看結果*/
select?*?from?test1;

代碼中使用到了存儲過程,關于存儲過程的詳解下章節(jié)介紹。

delimiter關鍵字

我們寫sql的時候,mysql怎么判斷sql是否已經結束了,可以去執(zhí)行了?

需要一個結束符,當mysql看到這個結束符的時候,表示可以執(zhí)行前面的語句了,mysql默認以分號為結束符。

當我們創(chuàng)建存儲過程或者自定義函數(shù)的時候,寫了很大一片sql,里面包含了很多分號,整個創(chuàng)建語句是一個整體,需要一起執(zhí)行,此時我們就不可用用分號作為結束符了。

那么我們可以通過delimiter關鍵字來自定義結束符。

用法:

delimiter?分隔符
上面示例的效果
mysql>?/*創(chuàng)建表test1*/
mysql>?drop?table?IF?EXISTS?test1;
Query?OK,?0?rows?affected?(0.01?sec)

mysql>?create?table?test1(a?int?PRIMARY?KEY,b?int);
Query?OK,?0?rows?affected?(0.01?sec)

mysql>
mysql>?/*聲明腳本的結束符為$$*/
mysql>?DELIMITER?$$
mysql>?DROP?PROCEDURE?IF?EXISTS?proc1;
????->?CREATE?PROCEDURE?proc1()
????->?BEGIN
????->???/*聲明了一個局部變量*/
????->???DECLARE?v_a?int;
????->
????->???select?ifnull(max(a),0)+1?into?v_a?from?test1;
????->???select?@v_b:=v_a*2;
????->???insert?into?test1(a,b)?select?v_a,@v_b;
????->?end?$$
Query?OK,?0?rows?affected?(0.00?sec)

Query?OK,?0?rows?affected?(0.00?sec)

mysql>
mysql>?/*聲明腳本的結束符為;*/
mysql>?DELIMITER?;
mysql>
mysql>?/*調用存儲過程*/
mysql>?call?proc1();
+-------------+
|?@v_b:=v_a*2?|
+-------------+
|???????????2?|
+-------------+
1?row?in?set?(0.00?sec)

Query?OK,?1?row?affected?(0.01?sec)

mysql>?/*查看結果*/
mysql>?select?*?from?test1;
+---+------+
|?a?|?b????|
+---+------+
|?1?|????2?|
+---+------+
1?row?in?set?(0.00?sec)

用戶變量和局部變量對比

作用域 定義位置 語法
用戶變量 當前會話 會話的任何地方 @符號,不用指定類型
局部變量 定義他的begin end之間 begin end中的第一句話 不加@符號,要指定類型

總結

  • 本文對系統(tǒng)變量和自定義變量的使用做了詳細的說明,知識點比較細,可以多看幾遍,加深理解

  • 系統(tǒng)變量可以設置系統(tǒng)的一些配置信息,數(shù)據(jù)庫重啟之后會被還原

  • 會話變量可以設置當前會話的一些配置信息,對當前會話起效

  • declare創(chuàng)建的局部變量常用于存儲過程和函數(shù)的創(chuàng)建中

  • 作用域:全局變量對整個系統(tǒng)有效、會話變量作用于當前會話、用戶變量作用于當前會話、局部變量作用于begin end之間

  • 注意全局變量中用到了`@@`,用戶變量變量用到了`@`,而局部變量沒有這個符號

  • `delimiter`關鍵字用來聲明腳本的結束符文章來源地址http://www.zghlxwxcb.cn/news/detail-700287.html

到了這里,關于玩轉Mysql系列 - 第16篇:變量詳解的文章就介紹完了。如果您還想了解更多內容,請在右上角搜索TOY模板網以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網!

本文來自互聯(lián)網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。如若轉載,請注明出處: 如若內容造成侵權/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經查實,立即刪除!

領支付寶紅包贊助服務器費用

相關文章

  • 玩轉Mysql系列 - 第20篇:異常捕獲及處理詳解

    這是Mysql系列第20篇。 環(huán)境:mysql5.7.25,cmd命令中進行演示。 代碼中被[]包含的表示可選,|符號分開的表示可選其一。 需求背景 我們在寫存儲過程的時候,可能會出現(xiàn)下列一些情況: 插入的數(shù)據(jù)違反唯一約束,導致插入失敗 插入或者更新數(shù)據(jù)超過字段最大長度,導致操作失

    2024年02月09日
    瀏覽(20)
  • 玩轉Mysql系列 - 第17篇:存儲過程&自定義函數(shù)詳解

    這是Mysql系列第17篇。 環(huán)境:mysql5.7.25,cmd命令中進行演示。 代碼中被[]包含的表示可選,|符號分開的表示可選其一。 需求背景介紹 線上程序有時候出現(xiàn)問題導致數(shù)據(jù)錯誤的時候,如果比較緊急,我們可以寫一個存儲來快速修復這塊的數(shù)據(jù),然后再去修復程序,這種方式我們

    2024年02月09日
    瀏覽(28)
  • 玩轉MySQL數(shù)據(jù)庫之SQL優(yōu)化之慢查詢

    本系列為:MySQL數(shù)據(jù)庫詳解,為千鋒資深教學老師獨家創(chuàng)作,致力于為大家講解清晰MySQL數(shù)據(jù)庫相關知識點,含有豐富的代碼案例及講解。如果感覺對大家有幫助的話,可以【關注】持續(xù)追更~ 文末有本文重點總結,技術類問題,也歡迎大家和我們溝通交流! 從今天開始本系列

    2024年02月06日
    瀏覽(98)
  • MySQL數(shù)據(jù)庫——存儲過程-變量(系統(tǒng)變量、用戶定義變量、局部變量)

    目錄 系統(tǒng)變量? 1.查看系統(tǒng)變量? 2.設置系統(tǒng)變量 演示示例 用戶定義變量 1.賦值? 2.使用 演示示例 局部變量 聲明? 賦值 演示示例 變量 在MySQL中變量分為三種類型: 系統(tǒng)變量、用戶定義變量、局部變量。 系統(tǒng)變量是MySQL服務器提供,不是用戶定義的,屬于服務器層面。分為全

    2024年02月05日
    瀏覽(43)
  • 玩轉Mysql系列 - 第8篇:詳解排序和分頁(order by & limit),及存在的坑

    這是Mysql系列第7篇。 環(huán)境:mysql5.7.25,cmd命令中進行演示。 代碼中被[]包含的表示可選,|符號分開的表示可選其一。 本章內容 詳解排序查詢 詳解limit limit存在的坑 分頁查詢中的坑 排序查詢(order by) 電商中:我們想查看今天所有成交的訂單,按照交易額從高到低排序,此

    2024年02月11日
    瀏覽(20)
  • MySQL 數(shù)據(jù)庫全局變量中文解釋

    Name Value auto_increment_increment AUTO_INCREMENT 字段值的自增長步長值。 auto_increment_offset AUTO_INCREMENT 字段值的初始值。 autocommit 指示新連接的默認提交模式是否啟用。 automatic_sp_privileges 控制是否在存儲過程上創(chuàng)建或更改時自動分配特定權限。 back_log 在開始拒絕新連接之前,等待處理

    2024年02月07日
    瀏覽(26)
  • Navicat 16 for MySQL:打造高效數(shù)據(jù)庫開發(fā)管理工具

    Navicat 16 for MySQL:打造高效數(shù)據(jù)庫開發(fā)管理工具

    隨著數(shù)據(jù)的快速增長和復雜性的提升,數(shù)據(jù)庫成為了現(xiàn)代應用開發(fā)中不可或缺的一部分。而在MySQL數(shù)據(jù)庫領域,Navicat 16 for MySQL作為一款強大的數(shù)據(jù)庫開發(fā)管理工具,正受到越來越多開發(fā)者的青睞。 Navicat 16 for MySQL擁有豐富的功能和直觀的界面,能夠幫助開發(fā)者輕松進行數(shù)據(jù)庫

    2024年01月24日
    瀏覽(109)
  • MySQL數(shù)據(jù)庫干貨_16—— SQL99標準中的查詢

    SQL99標準中的查詢 MySQL5.7 支持部分的SQL99 標準。 SQL99中的交叉連接(CROSS JOIN) 示例: 使用交叉連接查詢 employees 表與 departments 表。 SQL99中的自然連接(NATURAL JOIN) 自然連接 連接只能發(fā)生在兩個表中有相同名字和數(shù)據(jù)類型的列上。如果列有相同的名字,但數(shù)據(jù)類型不同,NATURAL J

    2024年02月06日
    瀏覽(21)
  • 關于Android Studio連接mysql數(shù)據(jù)庫的過程和注冊功能的實現(xiàn)(數(shù)據(jù)的插入)以及mysql環(huán)境變量的配置

    關于Android Studio連接mysql數(shù)據(jù)庫的過程和注冊功能的實現(xiàn)(數(shù)據(jù)的插入)以及mysql環(huán)境變量的配置

    1.安裝mysql數(shù)據(jù)庫,安裝的教程嗶站有很多,版本盡量用mysql5.7的版本,用mysql8.0的版本與android studio進行連接的話可能會出現(xiàn)問題。 2.安裝完成之后,給本機配置環(huán)境變量,步驟:如下圖示 (1)通過搜索打開環(huán)境變量。 (2).點擊環(huán)境變量。 (3).找到系統(tǒng)變量點擊新建。

    2024年04月14日
    瀏覽(27)
  • 一文搞定Mysql+Navicat16長期免費直連數(shù)據(jù)庫安裝教程

    一文搞定Mysql+Navicat16長期免費直連數(shù)據(jù)庫安裝教程

    一、Mysql安裝包的下載 這里下載的是mysql8版本 第一個安裝包比較小, 第二個安裝包比較大, 因為包含調試工具,我這里下載的是第一個。 二、解壓并配置安裝目錄 這里瀏覽器默認的下載路徑是TempEdgeDownload,把解壓后的文件夾移動到了develop_tools文件目錄下(安裝目錄) 三、添

    2024年02月12日
    瀏覽(20)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領取紅包,優(yōu)惠每天領

二維碼1

領取紅包

二維碼2

領紅包