MySQL定義變量的生命周期是指變量存在的時(shí)間段。在MySQL中,使用SET命令定義變量,其生命周期可以分為以下兩種:
SET @var_name = value;
一、session級(jí)別生命周期
SET @var_name = value;
當(dāng)變量定義在session級(jí)別時(shí),其生命周期是在當(dāng)前MySQL會(huì)話中。也就是說(shuō),在當(dāng)前會(huì)話中的其他查詢語(yǔ)句中,可以使用此變量。但是,當(dāng)此會(huì)話結(jié)束時(shí),這些變量就會(huì)被銷毀。如下所示:
-- 在當(dāng)前MySQL會(huì)話中定義一個(gè)變量 SET @age = 18; -- 輸出此變量 SELECT @age; -- 結(jié)束當(dāng)前MySQL會(huì)話 -- 在新的MySQL會(huì)話中嘗試輸出前面定義的變量 SELECT @age;
輸出結(jié)果:
18 NULL
在第一個(gè)會(huì)話中定義的變量可以使用,但是在新會(huì)話中無(wú)法使用。
二、局部生命周期
BEGIN DECLARE var_name data_type DEFAULT value; -- 語(yǔ)句塊中使用變量 END;
當(dāng)變量定義在存儲(chǔ)過(guò)程或函數(shù)中時(shí),其生命周期是在存儲(chǔ)過(guò)程或函數(shù)執(zhí)行期間。它的范圍被限制在聲明它的語(yǔ)句塊內(nèi)部。也就是說(shuō),在語(yǔ)句塊外部的任何查詢語(yǔ)句中是無(wú)法使用此變量的。當(dāng)存儲(chǔ)過(guò)程或函數(shù)執(zhí)行完畢時(shí),這些變量也將被銷毀。如下所示:
-- 定義一個(gè)存儲(chǔ)過(guò)程 DROP PROCEDURE IF EXISTS my_procedure; CREATE PROCEDURE my_procedure() BEGIN DECLARE age INT DEFAULT 18; -- 在此語(yǔ)句塊中使用變量 SELECT age; END; -- 調(diào)用存儲(chǔ)過(guò)程并輸出結(jié)果 CALL my_procedure();
輸出結(jié)果:
18
在存儲(chǔ)過(guò)程中定義的變量只在存儲(chǔ)過(guò)程中可用,無(wú)法在調(diào)用存儲(chǔ)過(guò)程之外的查詢語(yǔ)句中使用。