程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> MYSQL數據庫 >> MySQL綜合教程 >> MySql事物觸發器(實例)

MySql事物觸發器(實例)

編輯:MySQL綜合教程

MySql事物觸發器(實例)

1,連接查詢
union 連接的是多個select 語句
join 連接查詢:
當我們期望的結果不再同一張表上時,我們需要使用join連接查詢
語法:
table1 join table2 on table1的某個字段 = table2的某個字段
條件是 商品表中商品的分類id =  分類表中這個分類的id

當查詢語句中,多次使用某個表,或者這個表名特別長的時候,我們建議給這個表添加一個別名
mysql> selectgoods_name,shop_price,cat_name from ecs_goods as g join ecs_catego
ry as c on g.cat_id = c.cat_id whereg.shop_price>=1000;

join的分類:
左連接查詢 leftjoin:查詢的結果是只要左邊有的記錄,都會顯示,右邊沒有的顯示為null
右連接查詢 rightjoin
內連接查詢 innerjoin : 查詢的結果是兩個表都有的數據


事務:
什麼是事務?
事務是邏輯上的一組操作,組成這組操作的各個單元,要不全都成功要不全都失敗,這個特性就是事務
注意:mysql數據支持事務,但是要求必須是innoDB存儲引擎
解決這個問題:
mysql的事務解決這個問題,因為mysql的事務特性,要求這組操作,要不全都成功,要不全都失敗,這樣就避免了某個操作成功某個操作失敗。利於數據的安全

如何使用:
(1)在執行sql語句之前,我們要開啟事務 start transaction;
(2)正常執行我們的sql語句
(3)當sql語句執行完畢,存在兩種情況:
    1,全都成功,我們要將sql語句對數據庫造成的影響提交到數據庫中,committ
       2,某些sql語句失敗,我們執行rollback(回滾),將對數據庫操作趕緊撤銷
php代碼:



開啟事務後,只要不執行commit,sql語句不會對真實的數據庫造成影響
只有執行commit之後,才會對真實數據庫造成影響

觸發器:
觸發器是數據庫的一個程序,他是用來監聽著數據表的某個行為,一旦數據表的這個行為發生了,馬上執行相應的sql語句

觸發器的語法結構:
create trigger 觸發器的名稱 觸發器事件 on 監聽的表名 for eachrow 行為發生後執行的sql語句

觸發器事件組成:;兩部分組成:
觸發器事件發生的時間-----是在監聽的表的行為 after  before 常用的是after
觸發器執行的內容:增刪改

創建order 表的時候,需要注意,因為order在mysql中是一個關鍵字排序,為了避免錯誤的發生,我們可以添加反引號,表明這不是一個關鍵字

如何使用觸發器:
案例研究:
一旦生成訂單,對應的庫存表要減去相應的數據
(1)建商品表和訂單表


訂單表


(2)給訂單表綁定觸發器,一旦訂單表增加訂單,馬上執行sql語句,將商品庫存表減去相應的數據


現在有個問題:
每次下訂單後,庫存表都是減去相應的數量固定死的,但是我們的需求是:用戶下幾個訂單,庫存表減去幾個庫存

如何在觸發器中使用觸發數據?
什麼是觸發的數據:就是用戶在訂單表中購買的數量
new 關鍵字代表新增加的數量,訂單表中新下的訂單數量
old 關鍵字代表是舊的記錄(過去的記錄,取消的訂單數量)
new 的使用:


old的使用:
舊的過去的記錄,之前買了幾個商品,但是又不想要了,取消訂單
取消訂單後,庫存中要增加的相應的數量


update中new 和 old的使用
現在的需求是:
之前購買了5個samsung手機,現在想買10個,需要更新訂單表
這個時候,觸發器就需要監聽著update這個行為
先將之前下的訂單撤銷,再重新下訂單


觸發器是什麼?
用來監聽數據表的某個行為(insert,delete,update),一旦這個行為發生了,馬上執行相應的sql語句
 
刪除觸發器:
drop trigger 觸發器的名稱

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved