數據庫中的觸發器是以針對數據庫的操作(增刪改)而被調用的特殊存儲過程。通常也叫事件。觸發器實現了相關表的更新處理自動化的機制。
觸發器並不是直接被調用執行的,而是針對具體表的操作時被調用,也就是說在創建觸發器時,需要指定針對哪個表的操作才能成為觸發裝置,而這個表就是觸發器調用方的表。
基本語法:
條件決定觸發器運行的時刻:
由事件名和發生時刻決定。事件名就是指insert、update、delete等操作。並不是嚴格意義上的insert、update、delete命令,像replace、load data infile等伴隨有數據插入動作的處理都屬於insert類。
發生時刻是指決定觸發器在事件發生之前還是發生之後,指定before或after其中之一即可。
for each row:
固定值,表示觸發器是以行為單位執行的,例如當用戶執行刪除2條記錄行時,意味著與刪除動作相關的觸發器也會被執行2次。
例子:創建日記表person_log存放person表被刪除的行,當刪除person的記錄時將其保存到person_log表裡。
1、先創建一個空的person_log表用來存放被刪除的記錄。
2、創建一個觸發器del_person,執行刪除操作後將記錄插入到person_log表。
3、從person表中執行刪除記錄操作來觸發事件
4、查看person_log表結果:
結果:從person表執行刪除一條記錄後會觸發person_log表中增加被刪除的記錄。
觸發器特有的特徵:old/new關鍵字
根據變更前後的數據記錄來使用。
可使用的關鍵詞與事件關係:
相關推薦
'每日學點---Mysql複製表'
"複製表create table table2 select * from table1;或者mysqldump olddb table1 -u root -ppassword --add-drop-table | mysql newdb -u root -ppasswor...
MySQL
2019-09-19
'mysql單表訪問優化'
"create table single_table( id int not null auto_increment, key1 varchar(100), key2 int, key3 varchar(100), key_part1 varchar(100), key_p...
'Python批量刪除mysql中千萬級大量數據'
"場景描述線上 mysql 數據庫裡面有張表保存有每天的統計結果,每天有1千多萬條,這是我們意想不到的,統計結果咋有這麼多。運維找過來,磁盤佔了 200G ,最後問了運營,可以只保留最近3天的,前面的數據,只能刪了。刪,怎麼刪?關注,轉發,私信小編“01”即可免費領取Pyt...
'「靈魂拷問」MySQL面試高頻一百問(工程師方向)'
"前言本文主要受眾為開發人員,所以不涉及到MySQL的服務部署等操作,且內容較多,大家準備好耐心和瓜子礦泉水.前一陣系統的學習了一下MySQL,也有一些實際操作經驗,偶然看到一篇和MySQL相關的面試文章,發現其中的一些問題自己也回答不好,雖然知識點大部分都知道,但是無法將...
'Flink 1.9 實戰:使用 SQL 讀取 Kafka 並寫入 MySQL'
"SqlSubmit 的實現筆者一開始是想用 SQL Client 來貫穿整個演示環節,但可惜 1.9 版本 SQL CLI 還不支持處理 CREATE TABLE 語句。所以筆者就只好自己寫了個簡單的提交腳本。後來想想,也挺好的,可以讓聽眾同時瞭解如何通過 SQL 的方式...
'MySQL索引失效和EXPLAIN工具:你建立的索引真的起到作用了嗎?'
"在我們使用MySQL的過程中,隨著數據量越來越大,查詢顯得有些吃力,這時候就要針對查詢就行優化,針對查詢優化,通過給字段添加索引可以提高數據的讀取速度,提高項目的併發能力和抗壓能力。在上一篇我們講了給數據庫中的表添加索引,來提高它的查詢速度,但是會有另外一種情況出現,那就...
'基於MySQL Binlog的Elasticsearch數據同步實踐'
"作者介紹張坤,馬蜂窩電商研發團隊度假業務高級研發工程師。一、為什麼要做隨著馬蜂窩的逐漸發展,我們的業務數據越來越多,單純使用 MySQL 已經不能滿足我們的數據查詢需求,例如對於商品、訂單等數據的多維度檢索。使用 Elasticsearch 存儲業務數據可以很好的解決我們...
'MySQL的相關函數的使用SQL實踐操作詳情,如日期函數'
"MySQL第一.SQL函數SQL數據庫有兩種函數,總數函數和數量函數1,總數函數: 計算從列中取得的值,返回一個單一的值。如下:AVG() : 返回平均值MAX() :返回最大值MIN() : 返回最小值FIRST() : 返回第一個記錄的值LAST() : 返回最後一個...
'乾貨:MySQL性能優化,in和exists'
"in和exists哪個性能更優sql腳本:上面的sql中 訂單表中(orders) 存在user_id,而又有用戶表(users),所以我們用orders表中user_id和user表中的id 來in 和 exists。結果1.where後面是小表(1)select co...
推薦中...