首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫

MySQL 5.0 基礎語法速查:儲存過程/函數/觸發器/流程控制/游標完整參考

     編輯:MySQL 資料庫相關知識

MySQL 5.0 引入完整程序式 SQL 能力。本文彙整 DDL/DML、儲存過程、函數、觸發器、流程控制、游標、動態 SQL 核心語法,供開發快速查閱。

一、儲存過程與函數管理

操作語法
建立過程CREATE PROCEDURE sp_name([IN|OUT|INOUT] param type...) routine_body
建立函數CREATE FUNCTION fn_name(params) RETURNS type routine_body
修改過程ALTER PROCEDURE sp_name [characteristics...]
修改函數ALTER FUNCTION fn_name [characteristics...]
刪除過程DROP PROCEDURE [IF EXISTS] sp_name
刪除函數DROP FUNCTION [IF EXISTS] fn_name
查看建立碼SHOW CREATE PROCEDURE/FUNCTION sp_name
查看狀態SHOW PROCEDURE/FUNCTION STATUS [LIKE 'pattern']
呼叫過程CALL sp_name(args) (必須加括號)

二、複合語句與流程控制

結構語法
區塊BEGIN ... END / label: BEGIN ... END label;
變數宣告DECLARE var type [DEFAULT val];
賦值SET var = expr; / SELECT col INTO var FROM tbl WHERE ...;
IFIF cond THEN ... ELSEIF ... ELSE ... END IF;
CASECASE WHEN cond THEN ... ELSE ... END CASE; 或 CASE expr WHEN val THEN ... END CASE;
WHILE[label:] WHILE expr DO ... END WHILE [label];
LOOP[label:] LOOP ... END LOOP [label]; (需 LEAVE)
REPEAT[label:] REPEAT ... UNTIL expr END REPEAT [label];
跳出LEAVE label;
繼續ITERATE label;
返回RETURN expr; (僅函數)

三、游標操作

DECLARE cur CURSOR FOR SELECT col FROM tbl WHERE ...;
OPEN cur;
FETCH cur INTO var1, var2...;
CLOSE cur;

需宣告 DECLARE CONTINUE HANDLER FOR NOT FOUND SET done=1; 處理結束。

四、觸發器

CREATE TRIGGER trigger_name
{BEFORE|AFTER} {INSERT|UPDATE|DELETE} ON table_name
FOR EACH ROW
trigger_body
  • NEW.col:新值 (INSERT/UPDATE 可用,BEFORE 可修改)
  • OLD.col:舊值 (UPDATE/DELETE 可用)
  • 範例:AFTER UPDATE ON account FOR EACH ROW IF NEW.balance<0 THEN SET NEW.balance=NULL; END IF;

五、動態 SQL (Prepared Statements)

PREPARE stmt FROM 'SELECT * FROM tbl WHERE id=?';
SET @id = 1;
EXECUTE stmt USING @id;
DEALLOCATE PREPARE stmt;

六、系統表查詢

SELECT * FROM INFORMATION_SCHEMA.ROUTINES WHERE ROUTINE_SCHEMA='db';
SELECT * FROM INFORMATION_SCHEMA.TRIGGERS WHERE TRIGGER_SCHEMA='db';

七、完整建立範例

DELIMITER //
CREATE PROCEDURE batchInsert()
BEGIN
  DECLARE i INT DEFAULT 0;
  WHILE i < 100 DO
    INSERT INTO student (name, age) VALUES ('kevin', '23');
    SET i = i + 1;
  END WHILE;
END
//
DELIMITER ;

掌握核心語法,即可在 MySQL 內層實現複雜業務邏輯,減少應用層往返。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved