日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

mysql多字段修改update_MySQL ------ 触发器(TRIGGER)(二十七)

發布時間:2024/9/19 数据库 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 mysql多字段修改update_MySQL ------ 触发器(TRIGGER)(二十七) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

MySQL 語句在需要時被執行,存儲過程也是,但是你要是想要某條(或某些語句)在事件發生時自動執行,該怎么辦觸發器由此而來

觸發器:某個表發生更改時自動處理。觸發器是MySQL響應delete,insert,update(增加,刪除,修改)時,自動執行的一條MySQL語句,或位于begin和end語句之間的一組語句,

ALTER:觸發器將在(delete,insert,update) 語句成功后執行,

BEFORE:觸發器將在(delete,insert,update) 語句前執行。

版本:于MySQL5 中增加,適用于MySQL5或之后的版本

如以下情景:1、每當增加一個顧客到某個數據庫表時,都檢查其電話號碼格式是否正確,州的縮寫是否為大寫 2、每當訂購一個產品時,都從庫存數量中減去訂購數量 3、無論何時刪除一行,都在某個存檔表中保留一個副本

創建觸發器的主要步驟、

1、唯一的觸發器名

2、觸發器關聯的表

3、觸發器應該響應的活動(delete,insert,update)

4、觸發器何時執行(處理之前或之后)

注意:在mysql 5中觸發器名必須在每個表中唯一,但不是在每個數據庫中唯一,雖然允許在同一個庫中的兩個表,有相同名字的觸發器,但是最好在數據庫范圍內使用唯一的觸發器名。

-- create trigger 觸發器名

1111

CREATE TRIGGER 用來創建名為 tri_vendors 的新觸發器。觸發器可在一個操作發生前或之后執行,這里給出了ALTER INSERT,所以此觸發器將在INSERT 語句成功后執行。這個觸發器還指定FOR EACH ROW,因此代碼對每個插入行執行,文本 add a vendor 將對每個插入的行顯示一次。

為了測試這個觸發器,使用insert 語句添加一行或多行到 vendors中,當成功插入后顯示add a vendor

只有表才支持觸發器,視圖不支持(臨時表也不支持)

觸發器按每個表每個事件每次的定義,每個表每個事件每次只允許一個觸發器。因此每個表最多支持6個觸發器(每條insert,update,delete之前和之后)

單一觸發器不能與多個事件或多個表關聯,所以如果你需要對一個insert 和update 操作執行的觸發器,則應該定義兩個觸發器。

如果BEFORE 觸發器失敗,則MySQL將不執行請求的操作。此外如果before 觸發器或語句本身失敗,MySQL將不執行AFTER 觸發器

刪除觸發器(DROP TRIGGER)

drop trigger 觸發器名字

觸發器不能更新或覆蓋,為了修改一個觸發器,必須刪除它,然后再重新創建

使用觸發器

ONE、INSERT 觸發器

insert 觸發器在insert 語句之前或之后執行。

1、在insert 觸發器代碼內,可引用一個名為 NEW 的虛擬表,訪問被插入的行

2、在before insert 觸發器,new中的值也可以被更新(允許更改被插入的值)

3、對于auto_increment 列,new 在insert 執行之前含0,在inset 執行之后包含新的自動生成值。

create

11

創建一個名為tri_neworders的觸發器,他按照after insert on orders 執行。在插入一個新訂單到orders 表時,MySQL生成一個新的訂單號并保存到order_num 中,觸發器從 NEW.order_num 取得這個值并返回他,此觸發器必須按照after insert 執行,因為在before insert 語句執行之前,新order_num 還沒有生成,對于orders 的每次插入使用這個觸發器將總是返回新的訂單號。

將defore 用于數據驗證和凈化(目的是保證插入表中的數據確實是需要的數據),

TWO、DELETE 觸發器

delete 觸發器在delete 語句執行之前或之后執行

在delete 觸發器代碼內,你可以引用一個名為old 的虛擬表,訪問被刪除的行

old 中的值全部都是只讀的,不能更新

mysql

在任意訂單刪除前將執行此觸發器。它使用一條insert語句將old 中的值(即要刪除的訂單),保存到一個名為 test_orders 的表中

注意: test_orders 和 archive_orders這兩個表的列和列的數據類型要一致

使用before delete 觸發器相對于after delete 觸發器的優點為:

如果(before delete 觸發器)由于某種原因訂單不能存檔,delete 本身將被放棄

上述,觸發器(trigger) 使用begin 和end 語句標記觸發器體,的好處是觸發器能容納多條sql 語句。

Three、UPDATE 觸發器

update 觸發器在update 語句執行之前或之后執行

1、在update 觸發器代碼中,你可以引用一個名為old的虛擬表訪問以前(update 語句前) 的值,引用一個名為new 的虛擬表訪問新更新的值

2、在before update 觸發器中,new 中的值可能被更新(允許更改將要用于update 語句中的值)

3、old 中的值全都是只讀的,不能更新。

mysql

任何數據凈化都需要在update語句之前進行,就想這個例子中一樣,每次更新一個行時,new.vend_state中的值(將用來更新表行的值)都用upper(new.vend_state)替換。

end!!!

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

2、創建觸發器可能需要特殊的安全訪問權限,但是觸發器的執行時是自動的。如果insert、update和 delete語句能夠執行,則相關的觸發器也能執行

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

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

5、遺憾的是,MySQL觸發器中不支持call 語句,這表示不能從觸發器內調用存儲過程,所需的存儲過程代碼需要復制到觸發器內。

總結

以上是生活随笔為你收集整理的mysql多字段修改update_MySQL ------ 触发器(TRIGGER)(二十七)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。