1. 程式人生 > >Mysql學習——觸發器

Mysql學習——觸發器

一、觸發器的定義

觸發器是一類特殊的事務,可以監視某種資料操作(insert/delete/update),並觸發相應操作(insert/delete/update)。

使用場景:

1、當向一張表中新增或刪除記錄時,需要在相關表中進行同步操作

2、當表上某列資料的值與其他表中的資料有聯絡時。

3、當需要對某張表進行跟蹤時

二、觸發器建立語法 —— 4要素

1、監視地點  table

2、監視事件  insert/update/delete

3、觸發時間 after/before

4、觸發事件 insert/update/delete

建立觸發器的語法:

create trigger 觸發器名稱 

after/before (觸發時間)

insert/update/delete (監視事件)

on 表名 (監視地址)

for each row

begin

sql1;

..

sqlN;

end;

設定mysql 最外層分割符  delimiter  $

檢視已有觸發器: show triggers

刪除已有觸發器:drop trigger  觸發器名稱

例子:

通過監視訂單表的新增訂單,減少商品表中對應商品的庫存

商品表:

CREATE TABLE `good` (
  `gid` int(11) NOT NULL,
  `name` varchar(10) NOT NULL,
  `num` smallint(6) DEFAULT NULL,
  PRIMARY KEY (`gid`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

訂單

表:

CREATE TABLE `ord` (
  `gid` int(11) DEFAULT NULL,
  `orderid` int(11) DEFAULT NULL,
  `much` smallint(6) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

建立監聽器: new  對應新行   old  對應舊行

delimiter  $

create trigger good_num_trigger

after

insert

on ord

for each row

begin

update good set num = num - new

.much where gid = new.gid;

end$

create trigger good_add_num

after

delete

on ord

for each row

begin

update good set num = num+old.much where gid =old.gid;

end$

delimiter  ;

建立監聽器:在訂單訂購數量改變時,更新商品庫存表中的庫存 new  對應新行   old  對應舊行

delimiter  $

create trigger ord_update_much

before

update

on ord

for each row

begin

update good set num = num+old.much -new.much where gid =new.gid;

end$

delimiter  ;

建立監聽器:判斷插入的訂單的much  是否大於訂購商品的庫存,如果大於庫存,則調整該訂單的訂購數量為當前商品庫存

delimiter  $

create trigger ord_check_much

before

insert

on ord

for each row

begin

declare 

rnum int;

select num into rnum from good where gid = new.gid;

if new.much > rnum then

set new.much = rnum;

end if;

update good set num = num -new.much where gid = new.gid;

end$

delimiter  ;

注意:for each row 在mysql 中的監聽器必須有,在其他資料庫中比如oracle中的監聽器是可以缺失的

1、如果有 for each row ,則是行級監聽器

執行的語句操作了n行資料,則該監聽器被呼叫n次。

2、如果沒有for each row,則是語句級監聽器

按照監聽到的語句數量,呼叫監聽器

相關推薦

Mysql學習——觸發器

一、觸發器的定義 觸發器是一類特殊的事務,可以監視某種資料操作(insert/delete/update),並觸發相應操作(insert/delete/update)。 使用場景: 1、當向一張表中新增或刪除記錄時,需要在相關表中進行同步操作 2、當表上某列資料的值與其他表

mysql學習之旅-之使用-1.2.3-之觸發器

1、觸發器簡介 觸發器就是在執行增刪改時自行執行的sql語句,是儲存在資料庫目錄中的 2、觸發器的優缺點 優點: 1、減少後臺頻繁訪問資料庫 2、安全性:可以基於資料庫的值是使用者具有操作資料庫的某種許可權,可以基於時間限制使用者操作

MYSQL學習心得(8) -- 觸發器

觸發器是一個特殊的儲存過程,不同的是儲存過程要用CALL來呼叫,而觸發器不需要使用CALL 也不需要手工啟動,只要當一個預定義的事件發生的時候,就會被MYSQL自動呼叫。 建立觸發器 語法如下: CREATE TRIGGER trigger_name trigger_ti

mysql學習六:觸發器

觸發器 觸發器:trigger,是指事先為某張表繫結一段程式碼,當表中的某些內容發生改變(增、刪、改)的時候,系統會自動觸發程式碼並執行。 觸發器包含三個要素,分別為 事件型別:增刪改,即insert、delete和update;觸發時間:事件型別前和後,即befor

Mysql學習總結(10)——MySql觸發器使用講解

  觸發器(TRIGGER)是由事件來觸發某個操作。這些事件包括INSERT語句、UPDATE語句和DELETE語句。當資料庫系統執行這些事件時,就會啟用觸發器執行相應的操作。MySQL從5.0.2版本開始支援觸發器。在本文中將講解的內容包括: 觸發器的含義和作用 如何建

mysql學習之check無效的解決及觸發器的使用

修改 情況 執行 col 語義 沒有 遇到 可用 觸發器 SQL的約束種類: 一、非空約束 not null 二、唯一約束 unique 三、主鍵約束 四、外鍵約束 五、check約束 該約束可用於列之間檢查語義限制的,實際應用過程中非常常用!! 然鵝,M

MySQL學習筆記(六)—— MySQL自連接

概念 cor 子查詢 ron 表操作 例子 質量 _id order by 有的時候我們需要對同一表中的數據進行多次檢索,這個時候我們可以使用之前學習過的子查詢,先查詢出需要的數據,再進行一次檢索。 例如:一張products表,有產品id,供應商id(vend_

Mysql學習之十二:JDBC連接數據庫之DriverManager方法

url state 種類 delet rom 條件 管理系 ont into JDBC連接數據庫 ?創建一個以JDBC連接數據庫的程序,包括7個步驟: 1、載入JDBC驅動程序: 在連接數據庫之前。首先要載入想要連接的數據庫的驅動到JVM

mysql 學習筆記

flush inf odi 策略 個數 替代 中文 產生 數據庫 Mysql 學習筆記 1、安裝 環境: Windows 7 Mysql 5.5 從 http://www.mysql.com下載 EMS Mysql Query 1.6.0

MySQL學習(一)ODBC 安裝

oca local new cmd 密碼 服務 關閉 mysql 系統 寫前說明 初次接觸MySQL,都說MySQL各種好。我也來學習學習。之前只有SQLServer2008的經驗,其實也只是皮毛。因為SQLServer還是比較容易上手的。也不麻煩。但是自己

mysql學習筆記(1-安裝簡介)

配置文件 服務器 二進制 mysql 通用 mysql的安裝方式:(1)通過系統提供的默認版本(穩定版,該版本滿足了使用的需求,建議使用,os vendor)(2)mysql官方提供 官方提供的通用rpm安裝包 官方提供的文件,以文件覆蓋的方式安裝 源碼包編譯安裝

mysql學習筆記(5-DDL命令)

mysql服務器端命令: DDL:數據定義語言,主要用於管理數據庫組件,例如表、索引、視圖、用戶、存儲過程 CREATE、ALTER、DROP DML:數據操縱語言,主要用管理表中的數據,實現數據的增、刪、改、查; INSERT, DELETE, UPDAT

Mysql觸發器trigger

更新 如何 語法 int delete gid 一個 數量 恢復 觸發器(trigger):監視某種情況,並觸發某種操作。 show triggers ; //查看所有觸發器 drop trigger triggerName ;

MySQL學習筆記-自定義函數

自定義函數 signed mysql pwm begin 多個 2個 list ive MySQL學習筆記-自定義函數 1.自定義函數簡介 自定義函數:用戶自定義函數(user-defined function,UDF)是一種對MySQL擴展的途徑,其用法與內置函數相同

mysql-學習-8-20170522-初試復制

image ror 編號 com sync 1.5 glog 使用 梳理 mysql-學習-8-20170522-mysql的復制 5.1 row 5.6.10 GTID主從 row+Gtid + mysqlbinlog (smei-sync) binary lo

MySQL學習筆記-數據類型與操作數據表

數據表 mysql 記錄 MySQL學習筆記-數據類型與操作數據表數據類型: 1.字符型 2.整型 3.浮點型 4.日期時間型數據表操作: 1.插入記錄 2.查找記錄記錄操作: 1.創建數據表 2.約束的使用 1.數據類型【1】整型:數據類型存儲範圍字節TINYINT有符號型:-1

mysql-學習-9-20170524-復制原理

style 9.png pos repl prepare 半同步 loss osi ges mysql-學習-9-20170524-復制原理 剖析復制線程 mysql5.7復制的特點 主庫寫日誌binlog的流程, innodb 到 redo 再到commit可以

Mysql學習筆記003

data 信息 3-0 which 真的 txt文件 logs 筆記 ati 從表檢索信息 在前面,我, 創建了一個數據庫test 進入數據庫 創建了一個表pet 插入了一些數據。那麽問題來了,我要是想要瞅一瞅我的表中的數據腫麽辦呢?莫著急,待我一一道來 SELECT語

Mysql學習筆記006

text mysql學習 hist 範圍 esc continue not null sel 小寫 這裏並沒有前情回顧 NULL值操作 Null是一個特殊的值,它表示著“沒有值”或者“未知值”,記住它是一個與眾不同的值。 為了測試NULL,不能用算數比較操作符 不信

MYSQL學習筆記三:日期和時間函數

div content minute name top fonts table hmm 指定 MYSQL學習筆記三:日期和時間函數 1. 獲取當前日期的函數和獲取當前時間的函數 /*獲取當前日期的函數和獲取當前時間的函數。將日期以‘YYYY-MM-DD‘或者’YYYYM