1. 程式人生 > 其它 >Numpy基礎學習筆記2020.12.28

Numpy基礎學習筆記2020.12.28

對觸發器的支援是在MySQL 5中增加的。

建立觸發器

在建立觸發器時,需要給出4條資訊:

❑ 唯一的觸發器名;

❑ 觸發器關聯的表;

❑ 觸發器應該響應的活動(DELETE、INSERT或UPDATE);

❑ 觸發器何時執行(處理之前或之後)。

觸發器按每個表每個事件每次地定義,每個表每個事件每次只允許一個觸發器。因此,每個表最多支援6個觸發器(每條INSERT、UPDATE和DELETE的之前和之後)。單一觸發器不能與多個事件或多個表關聯,所以,如果你需要一個對INSERT和UPDATE操作執行的觸發器,則應該定義兩個觸發器。

INSERT觸發器

❑ 在INSERT觸發器程式碼內,可引用一個名為NEW的虛擬表,訪問被插入的行;

❑ 在BEFORE INSERT觸發器中,NEW中的值也可以被更新(允許更改被插入的值);

❑ 對於AUTO_INCREMENT列,NEW在INSERT執行之前包含0,在INSERT執行之後包含新的自動生成值。

DROP TRIGGER IF EXISTS neworder;
CREATE TRIGGER neworder AFTER INSERT ON orders FOR EACH ROW BEGIN
SELECT NEW.order_num into @p1;
END

CREATE TRIGGER用來建立名為neworder的新觸發器。觸發器可在一個操作發生之前或之後執行,這裡給出了AFTER INSERT,所以此觸發器將在INSERT語句成功執行後執行。這個觸發器還指定FOR EACH ROW,因此程式碼對每個插入行執行。

INSERT INTO `demo`.`orders` (`order_date`, `cust_id`) VALUES (NOW(), '1');

SELECT @p1;

DELETE觸發器

❑ 在DELETE觸發器程式碼內,你可以引用一個名為OLD的虛擬表,訪問被刪除的行;

❑ OLD中的值全都是隻讀的,不能更新。

DROP TRIGGER IF EXISTS deleteorder;
CREATE TRIGGER deleteorder BEFORE DELETE ON orders FOR EACH ROW BEGIN
    INSERT INTO `demo`.`orders_old` (`order_num`,`order_date`,`cust_id`)
    
VALUES (OLD.order_num,OLD.order_date,OLD.cust_id); END

在任意訂單被刪除前將執行此觸發器。它使用一條INSERT語句將OLD中的值(要被刪除的訂單)儲存到一個名為orders_old的存檔表中(為實際使用這個例子,你需要用與orders相同的列建立一個名為orders_old的表)。使用BEFORE DELETE觸發器的優點(相對於AFTER DELETE觸發器來說)為,如果由於某種原因,訂單不能存檔,DELETE本身將被放棄。

UPDATE觸發器

❑ 在UPDATE觸發器程式碼中,你可以引用一個名為OLD的虛擬表訪問以前(UPDATE語句前)的值,引用一個名為NEW的虛擬表訪問新更新的值;

❑ 在BEFORE UPDATE觸發器中,NEW中的值可能也被更新(允許更改將要用於UPDATE語句中的值);

❑ OLD中的值全都是隻讀的,不能更新。

DROP TRIGGER IF EXISTS updateorder;
CREATE TRIGGER updateorder BEFORE UPDATE ON orders FOR EACH ROW BEGIN
    set NEW.cust_id = NEW.cust_id + 1;
END

關於觸發器的進一步介紹

❑ 與其他DBMS相比,MySQL 5中支援的觸發器相當初級。未來的MySQL版本中有一些改進和增強觸發器支援的計劃。

❑ 建立觸發器可能需要特殊的安全訪問許可權,但是,觸發器的執行是自動的。如果INSERT、UPDATE或DELETE語句能夠執行,則相關的觸發器也能執行。

❑ 應該用觸發器來保證資料的一致性(大小寫、格式等)。在觸發器中執行這種型別的處理的優點是它總是進行這種處理,而且是透明地進行,與客戶機應用無關。

❑ 觸發器的一種非常有意義的使用是建立審計跟蹤。使用觸發器,把更改(如果需要,甚至還有之前和之後的狀態)記錄到另一個表非常容易。

❑ 遺憾的是,MySQL觸發器中不支援CALL語句。這表示不能從觸發器內呼叫儲存過程。所需的儲存過程程式碼需要複製到觸發器內。

書籍:MySQL必知必會-第25章 使用觸發器