萬盛學電腦網

 萬盛學電腦網 >> 數據庫 >> mysql教程 >> MySQL、SQL Server 和 Oracle 觸發器的創建

MySQL、SQL Server 和 Oracle 觸發器的創建

下面我們一起來看一篇關於MySQL、SQL Server 和 Oracle 觸發器的創建的例子了,看看不同版本的mysql數據庫中會有什麼區別吧.

場景:當 users 表在 insert,update,delete 時,在 users_log 表中記錄變更的 id

MySQL觸發器的創建

觸發時機:BEFORE,AFTER

觸發事件:INSERT,UPDATE,DELETE

NEW 和 OLD 關鍵字:

| action | NEW | OLD |

|--------|----------------|----------------|

| insert | 插入的新數據 | 無 |

| update | 修改為的新數據 | 被修改的原數據 |

| delete | 無 | 被刪除的原數據 |

DELIMITER $
CREATE TRIGGER insert_user AFTER INSERT
ON users FOR EACH ROW
BEGIN
    INSERT INTO users_log(user_id, action) VALUES(NEW.id, 'insert');
END$
DELIMITER ;

SQL Server觸發器的創建

觸發時機:INSTEAD OF(之前),FOR(之後)

觸發事件:INSERT,UPDATE,DELETE

INSERTED 和 DELETED 邏輯(概念)表:作用相當於 MySQL 中的 NEW 和 OLD 關鍵字,不過 MySQL 的代表一條記錄,而 SQL Server 的代表所有記錄的臨時表

CREATE TRIGGER insert_user ON users FOR INSERT AS
BEGIN
    DECLARE @id INT
    SELECT @id = MIN(id) FROM INSERTED WHILE @id IS NOT NULL
    BEGIN
        INSERT INTO users_log(user_id, action) VALUES (@id, 'insert')
        SELECT @id = MIN(id) FROM INSERTED WHERE id > @id
    END
END

Oracle觸發器的創建

觸發時機:BEFORE,AFTER

觸發事件:INSERT,UPDATE,DELETE

:NEW 和 :OLD 關鍵字:作用相當於 MySQL 中的 NEW 和 OLD 關鍵字

CREATE OR REPLACE TRIGGER insert_user AFTER INSERT
ON SCOTT."users" FOR EACH ROW
BEGIN
    insert into SCOTT."users_log"("user_id", "action") VALUES (:NEW."id", 'insert');
END;
/

copyright © 萬盛學電腦網 all rights reserved