這個練習是從前面的練習延伸而來 : 實作練習 : PHP + Stored Procedure + Stored Function + Trigger 實作練習 : PHP + Stored Procedure + Stored Function + Trigger(二) 第一個練習在建立訂單時沒有檢查庫存;第二個練習加入「檢查庫存」,但是當庫存不足時,並不方便檢查,也不方便完成後續處理。 因此這篇文章要開始來探討,有哪些地方需要修改? 才能讓無法完成的訂購順利完成? 我們先看看原有資料表單 : -- 產品資料表 CREATE TABLE Products ( ProductID INT AUTO_INCREMENT PRIMARY KEY, ProductName VARCHAR(100) NOT NULL, Price DECIMAL(10, 2) NOT NULL, Stock INT NOT NULL ); -- 訂單資料表 CREATE TABLE Orders ( OrderID INT AUTO_INCREMENT PRIMARY KEY, OrderDate DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP, Custo…
在這篇" 實作練習 : PHP + Stored Procedure + Stored Function + Trigger "中,練習了使用Trigger/Stored Function/Stored Procedure並在PHP實現,但是因為在新增訂單時並沒有檢查庫存,因此必須再進一步來更新相關邏輯。 前面的練習已經實現了 : (1) 建立 Trigger 可以自動減去訂單數量,用來維護庫存量; (2) 建立 Stored Procedure 用來建立訂單; (3) 建立 Trigger 用來記錄建立訂單的log; (4) 建立 Stored Function 用來計算訂單總額; (5) 以php呼叫Stored Procedure 以介面來輸入訂單資料。 檢查庫存的邏輯應該寫在哪個地方? 目前有兩個觸發器 : UpdateStockAfterOrder 及 LogOrderAfterInsert 預存程序 CreateOrder 及 預存函式 CalculateOrderTotal 比較有可能的是 UpdateStockAfterOrder 與 CreateOrder 以下是觸發器UpdateStockAfterOrder DELIMITER // …
前面 實作練習 使用了Trigger、Stored Procedure、Stored Function來完成訂單的處理,但是在處理的過程中沒有加入「錯誤處理」,也就是當發生錯誤時應該怎麼處理。 在資料庫操作中,錯誤處理是一個非常重要的部分,它確保當操作失敗或發生異常時,系統能夠優雅地應對並保護資料完整性和一致性。錯誤處理的主要目的是識別錯誤、記錄錯誤資訊、進行必要的補救措施(如Rollback),並將錯誤訊息適當地傳達給使用者或系統管理員。 錯誤處理的語法 : DECLARE EXIT HANDLER FOR SQLEXCEPTION BEGIN -- 錯誤處理程序 -- 這裡加入需要的邏輯 END; (1) Stored Procedure 處理錯誤 : -- 建立一個資料表Products : CREATE TABLE Products ( ProductID INT AUTO_INCREMENT PRIMARY KEY, ProductName VARCHAR(100) NOT NULL, Price DECIMAL(10, 2) NOT NULL, Stock INT NOT NULL ); -- 建立一個資料表ProductLogs : CREATE TABLE P…
現在要來做個實作練習 : 建立 Trigger 可以自動減去訂單數量,用來維護庫存量;然後建立 Stored Procedure 用來建立訂單,並建立 Trigger 用來記錄建立訂單的log;建立 Stored Function 用來計算訂單總額,並以php呼叫Stored Procedure 以介面來輸入訂單資料。 要達成以上的需求,我們可以怎麼做呢? (1) 建立 MySQL 資料庫 : CREATE DATABASE OrderSystem CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci; 然後進入該資料庫 : USE OrderSystem; (2) 建立各資料表格 -- 接著建立商品資料表格Products : CREATE TABLE Products ( ProductID INT AUTO_INCREMENT PRIMARY KEY, ProductName VARCHAR(100) NOT NULL, Price DECIMAL(10, 2) NOT NULL, Stock INT NOT NULL ); -- 建立訂單資料表格Orders : CREATE TABLE Or…
觸發器 (Trigger) 是一種自動執行的程式,它會在表格上執行指定的INSERT、UPDATE或DELETE操作時被觸發。觸發器可以用來自動執行一些維護數據一致性的任務,例如驗證數據、記錄變更日誌等。 範例 : 如何在XAMPP中使用MySQL Trigger (範例) MySQL Stored Procedure/Stored Function/Trigger 實作 : 工讀生薪資管理系統 Trigger的語法 在MySQL中創建Trigger的語法如下: CREATE TRIGGER trigger_name {BEFORE | AFTER} {INSERT | UPDATE | DELETE} ON table_name FOR EACH ROW BEGIN -- 觸發器執行的SQL語句 statement1; statement2; statement3; END; trigger_name:觸發器的名稱。 BEFORE | AFTER:指定觸發器是在操作前還是操作後執行。 INSERT | UPDATE | DELETE:指定觸發器的觸發事件類型。 table_name:觸發器所關聯的表名。 FOR EACH ROW:指定觸發器…