mysql-触发器
mysql---触发器 触发器(trigger)顾名思义可以 监视某种情况,当情况发生时,触发某种操作 应用场景: 1、网购过程中,当提交商品订单时,往订单表中插入新记录,触发对应商品表的库存做出相应减少。 2、支付过程中,确认支付时触发验证卡上余额。 等等 以网
mysql---触发器触发器(trigger)顾名思义可以监视某种情况,当情况发生时,触发某种操作
应用场景:
1、网购过程中,当提交商品订单时,往订单表中插入新记录,触发对应商品表的库存做出相应减少。
2、支付过程中,确认支付时触发验证卡上余额。
等等
以网购的情况举例说明触发器的作用:
现有商品表(goods),包括商品id(goods_id),商品名(goods_name),库存数量(goods_name)
还有订单表(order_table),包括商品id(goods_id),购买数量(buy_num)
如果往订单表中插入一行记录
代表用户购买了20个商品id为1的商品,即购买了20台小米手机
与此同时,在逻辑上goods表中小米手机的库存也应该减去20台。
这两步其实应该是一个整体,而我们现在是手工操作。如何让第一步完成后,第二步自动执行呢?
这就可以用到触发器的概念。第一条插入语句的执行,触发了第二条修改库存的SQL
触发器四要素:
监视地点、监视事件、触发时间、触发事件
监视地点:触发器监视的对象是表
监视事件:触发器监视的事件只能是增、删、改
触发时间:在监视事件之前还是之后
触发事件:也只能是增、删、改
查看当前已有的触发器:
show triggers;
触发器的创建:
create trigger 触发器名称
after/befor (触发时间)
insert/update/delete (监视事件)
on 表名 (监视地址)
for each row
begin
sql1;
..
sqlN;
end
需要注意点 是,所需要触发的SQL语句都要以‘;’结束。end后面也需要有分界符,但不能再是';'。所以创建触发器之前需要先修改分界符
delimiter 分界符
现在利用触发器对上面的例子进行修改
这个触发器以完成:当订购了20个商品id为1的商品时,goods表的库存会同步减去20。我们来看看效果
商品id为1的商品库存的确减去了20。触发器的确完成了任务,但这个触发器并不智能,他只能处理商品id为1,购买数量为20的情况。要想应对其他情况需要获得提交订单的记录才行。
触发器引用行变量:
对于insert,插入一行后出现了一个新行用new表示,在触发器中可以通过new.列名来引用插入行各个字段的值
对于delete,删除一行后之前的那行不见了,用old表示,在触发器中可以通过old.列名来引用被删除行各个字段的值
对于update,修改一行后旧的一样用old表示,新的一行用new表示,在触发器中可以通过new.列名来引用修改后行各个字段的值,old.列名来引用修改前各个字段的值。
知道这些后,对触发器进行进一步修改
再看一下效果
没有提交订单前商品表的情况
提交两个订单
商品表变化
可见触发器的确发生了作用
触发器after和before的区别:
after是先完成增删改再触发
before是在增删改之前将以判断
前面已经讨论过after的情况,现在如果提交了一个订单购买了100个id为4的商品,然而三星手机库存仅有30个。如果按照上面的触发器,最后库存会变成-70。这显然是不对的,所以这时候可以利用before来对输入进行判断,如果购买数量大于库存则只能购买所剩下的商品。
现在购买100个id为4的商品
再看看订单表
实际购买的只有30而不是100

熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

記事本++7.3.1
好用且免費的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強大的PHP整合開發環境

Dreamweaver CS6
視覺化網頁開發工具

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)

如何在 PowerPoint 中的任何點擊之前隱藏文本如果您希望在單擊 PowerPoint 幻燈片上的任意位置時顯示文本,那麼設置起來既快速又容易。若要在 PowerPoint 中按一下任何按鈕之前隱藏文字:開啟您的 PowerPoint 文檔,然後按一下「插入 」功能表。點選新幻燈片。選擇空白或其他預設之一。仍然在插入選單中,按一下文字方塊。在投影片上拖出一個文字方塊。點擊文字方塊並輸入您

如何在MySQL中使用PHP編寫觸發器MySQL是一種常用的關係型資料庫管理系統,而PHP是一種流行的伺服器端腳本語言。在MySQL中使用PHP編寫觸發器可以幫助我們實現自動化的資料庫操作。本文將介紹如何使用PHP來撰寫MySQL觸發器,並提供具體的程式碼範例。在開始之前,請確保已經安裝了MySQL和PHP,並且已經建立了相應的資料庫表。一、創建PHP檔案和數據

如何在MySQL中使用PHP編寫自訂觸發器和預存程序引言:在開發應用程式時,我們經常需要在資料庫層面進行一些操作,例如插入、更新或刪除資料。 MySQL是一個廣泛使用的關聯式資料庫管理系統,而PHP是一種流行的伺服器端腳本語言。本文將介紹如何在MySQL中使用PHP編寫自訂觸發器和預存流程,並提供具體的程式碼範例。一、什麼是觸發器和預存程序觸發器(Trigg

在Oracle資料庫中,您可以使用CREATE TRIGGER語句來新增觸發器。觸發器是一種資料庫對象,它可以在資料庫表上定義一個或多個事件,並在事件發生時自動執行相應的操作。

如何在MySQL中使用Python編寫自訂觸發器觸發器是MySQL中的一種強大的功能,它可以在資料庫中的表上定義一些自動執行的操作。而Python則是一種簡潔而強大的程式語言,能夠方便地與MySQL進行互動。本文將介紹如何使用Python編寫自訂觸發器,並提供具體的程式碼範例。首先,我們需要安裝並匯入PyMySQL函式庫,它是Python與MySQL資料庫進行

MySQL觸發器是一種在資料庫管理系統中用於監控特定資料表的操作,並根據預先定義的條件執行對應操作的特殊程序。在建立MySQL觸發器時,我們可以使用參數來靈活地傳遞資料和訊息,讓觸發器更具通用性和適用性。在MySQL中,觸發器可以在特定表的INSERT、UPDATE、DELETE操作前或後觸發執行對應的邏輯。使用參數可以使得觸發器更具靈活性,可以根據需要傳遞需要

mysql的觸發器是行級的。依照SQL標準,觸發器可以分為兩種:1、行級觸發器,對於修改的每一行資料都會啟動一次,如果一個語句插入了100行數據,將會呼叫觸發器100次;2、語句級觸發器,針對每個語句啟動一次,一個插入100行資料的語句只會呼叫一次觸發器。而MySQL中只支援行級觸發器,不支援預語句級觸發器。

如何在MySQL中使用C#編寫自訂預存程序、觸發器和函數MySQL是一種廣泛使用的開源關係型資料庫管理系統,而C#是一種強大的程式語言,對於需要與資料庫進行互動的開發任務來說,MySQL和C#是很好的選擇。在MySQL中,我們可以使用C#來編寫自訂預存程序、觸發器和函數,來實現更靈活和強大的資料庫操作。本文將引導您使用C#編寫並執
