首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> MySQL 資料庫 >> MySQL 綜合教學

MySQL 預存程序變量聲明與數據類型詳解

     編輯:MySQL 綜合教學

MySQL 預存程序中的變量聲明、數據類型與參數模式

本文整理自《高可用 MySQL》讀書筆記,系統介紹預存程序中變量的聲明語法、常用數據類型、字面常量、命名規則、參數模式(IN/OUT/INOUT)、用戶變量、註釋與運算符用法。

變量聲明語法

DECLARE 語句用於創建局部變量,必須置於程式碼塊開頭,位於游標、處理程序與流程控制語句之前。語法:

DECLARE var_name type [DEFAULT value];

常用數據類型對照表

類型說明範圍/示例
INT/INTEGER32位整數-21億~+21億;無符號可達42億
BIGINT64位整數-9京~+9京;無符號0~18京
FLOAT單精度浮點數±1.7e38;精度約7位數字
DOUBLE雙精度浮點數±1.7e308;精度約15位數字
DECIMAL(p,s)定點數,精確儲存適合貨幣金額,如 78979.00
DATE日期'1999-12-31'
DATETIME日期時間,精確到秒'1999-12-31 23:59:59'
CHAR(n)定長字串,右側填充空格最大255字節
VARCHAR(n)變長字串最大64KB
TEXT/BLOB長文本/二進制數據最大64KB
LONGTEXT/LONGBLOB超大文本/二進制最大4GB

聲明範例

DECLARE l_int1 INT DEFAULT -2000000;
DECLARE l_int2 INT UNSIGNED DEFAULT 4000000;
DECLARE l_bigint1 BIGINT DEFAULT 4000000000000000;
DECLARE l_float FLOAT DEFAULT 1.8e8;
DECLARE l_double DOUBLE DEFAULT 2e45;
DECLARE l_numeric NUMERIC(8,2) DEFAULT 9.95;
DECLARE l_date DATE DEFAULT '1999-12-31';
DECLARE l_datetime DATETIME DEFAULT '1999-12-31 23:59:59';
DECLARE l_char CHAR(255) DEFAULT 'This will be padded to 255 chars';
DECLARE l_varchar VARCHAR(255) DEFAULT 'This will not be padded';
DECLARE l_text TEXT DEFAULT '長文本內容...';

字面常量分類

  • 數字字面量:十進制、十六進制(0x...)
  • 日期字面量:'YYYY-MM-DD'、'YYYY-MM-DD HH:MM:SS'
  • 字符字面量:單引號或雙引號包圍的字串

參數模式詳解

模式特性說明
IN預設模式調用者傳入值,程序內修改不影響外部
OUT輸出參數初始為 NULL,程序內賦值後返回給調用者
INOUT雙向參數調用者傳入,程序可修改並返回新值

代碼範例:IN 參數

CREATE PROCEDURE sp_demo_in_parameter(IN p_in INT)
BEGIN
  SELECT p_in;        -- 可見初始值
  SET p_in = 2;       -- 內部修改
  SELECT p_in;        -- 顯示修改後值
END;

SET @p_in = 1;
CALL sp_demo_in_parameter(@p_in);
SELECT @p_in;         -- 仍為 1,外部不可見內部修改

代碼範例:OUT 參數

CREATE PROCEDURE sp_demo_out_parameter(OUT p_out INT)
BEGIN
  SELECT p_out;       -- 顯示 NULL
  SET p_out = 2;
  SELECT p_out;       -- 顯示 2
END;

SET @p_out = 1;
CALL sp_demo_out_parameter(@p_out);
SELECT @p_out;        -- 返回 2,外部可見修改

代碼範例:INOUT 參數

CREATE PROCEDURE sp_demo_inout_parameter(INOUT p_inout INT)
BEGIN
  SELECT p_inout;     -- 可見初始值
  SET p_inout = 2;
  SELECT p_inout;     -- 顯示修改後值
END;

SET @p_inout = 1;
CALL sp_demo_inout_parameter(@p_inout);
SELECT @p_inout;      -- 返回 2

用戶變量(@var_name)

用戶變量屬於會話級別,可跨預存程序邊界讀寫,常用於:

  1. 不同預存程序間共享狀態
  2. 替代參數傳遞,簡化調用
-- 設置用戶變量
SET @greeting = 'Hello';
SELECT CONCAT(@greeting, ' World');  -- Hello World

-- 程序間傳遞
CREATE PROCEDURE p1() SET @last_procedure = 'p1';
CREATE PROCEDURE p2() SELECT CONCAT('Last was ', @last_procedure);
CALL p1(); CALL p2();  -- Last was p1

註釋風格

  • -- :單行註釋(雙連字符加空格)
  • /* ... */:多行註釋(C 風格)

運算符支援

支援標準算術(+ - * /)、比較(= < > <= >= <> !=)、邏輯(AND OR NOT)運算符。不支援 C 風格自增/自減(++、+=)。

CREATE PROCEDURE operators()
BEGIN
  DECLARE a INT DEFAULT 2;
  DECLARE b INT DEFAULT 3;
  DECLARE c FLOAT;
  SET c = a + b;  SELECT 'a+b=', c;
  SET c = a / b;  SELECT 'a/b=', c;
  SET c = a * b;  SELECT 'a*b=', c;
  IF a < b THEN SELECT 'a is less than b'; END IF;
  IF NOT (a = b) THEN SELECT 'a is not equal to b'; END IF;
END;
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved