現在要來做個實作練習 : 建立 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 Orders (
OrderID INT AUTO_INCREMENT PRIMARY KEY,
OrderDate DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
CustomerID INT NOT NULL,
TotalAmount DECIMAL(10, 2) NOT NULL
);
-- 建立訂單詳細資料表格OrderDetails :
CREATE TABLE OrderDetails (
OrderDetailID INT AUTO_INCREMENT PRIMARY KEY,
OrderID INT NOT NULL,
ProductID INT NOT NULL,
Quantity INT NOT NULL,
Price DECIMAL(10, 2) NOT NULL,
FOREIGN KEY (OrderID) REFERENCES Orders(OrderID),
FOREIGN KEY (ProductID) REFERENCES Products(ProductID)
);
-- 建立客戶資料表格Customers :
CREATE TABLE Customers (
CustomerID INT AUTO_INCREMENT PRIMARY KEY,
CustomerName VARCHAR(100) NOT NULL
);
-- 插入範例資料
INSERT INTO Customers (CustomerName) VALUES
('John'), ('Mary'), ('Hellen');
INSERT INTO Products (ProductName, Price, Stock) VALUES
('Product A', 100.00, 50),
('Product B', 200.00, 30),
('Product C', 300.00, 20);
CREATE TRIGGER UpdateStockAfterOrder
DELIMITER ;
DELIMITER ;
輸入資料如下 :