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

MySQL 與 SQL Server 觸發器寫法差異完整對比

     編輯:MySQL 資料庫相關知識

場景

表 test 插入資料時,自動同步插入到表 tem(結構相同)。

SQL Server 寫法

CREATE TRIGGER insert_test ON test
FOR INSERT
AS
BEGIN
    INSERT INTO tem
    SELECT * FROM inserted;  -- inserted 為虛擬表,含新增列
END;
GO
  • 關鍵字:FOR INSERT、虛擬表 inserted / deleted。
  • 支援 AFTER / INSTEAD OF。

MySQL 寫法

DELIMITER //
CREATE TRIGGER insert_test 
BEFORE INSERT ON test
FOR EACH ROW
BEGIN
    INSERT INTO tem (id, name) VALUES (NEW.id, NEW.name);
END //
DELIMITER ;
  • 關鍵字:BEFORE/AFTER、FOR EACH ROW、NEW / OLD 關鍵字引用新/舊列值。
  • 需用 DELIMITER 變更結束符號。
  • MySQL 不支援 INSTEAD OF 觸發器(僅視圖可用)。

核心差異總結表

特性SQL ServerMySQL
觸發時機AFTER / INSTEAD OFBEFORE / AFTER
行級觸發隱含(集合式)強制 FOR EACH ROW
新舊值引用inserted / deleted 虛擬表NEW.col / OLD.col
多行插入單次觸發,虛擬表含多列逐行觸發(每行執行一次)
結束符號GO / ;自訂 DELIMITER
交易控制隱含在同一交易同一交易,BEFORE 可阻止操作

MySQL 觸發器最佳實踐

  • 避免在觸發器中做複雜查詢或呼叫外部服務。
  • BEFORE 觸發器可用 SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = '...'; 阻止操作。
  • 大量匯入資料時考慮暫時 DROP TRIGGER 提升效能。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved