CREATE DATABASE mypos;
USE mypos;
CREATE TABLE 客户表 (
客户ID INT AUTO_INCREMENT PRIMARY KEY,
客户名称 VARCHAR(255) NOT NULL,
联系方式 VARCHAR(50) NOT NULL
);
CREATE TABLE 商品表 (
商品ID INT AUTO_INCREMENT PRIMARY KEY,
商品名称 VARCHAR(255) NOT NULL,
计量单位 VARCHAR(50) NOT NULL,
零售价 DECIMAL(10, 2) NOT NULL,
促销价 DECIMAL(10, 2)
);
CREATE TABLE 库存表 (
商品ID INT,
数量 INT,
FOREIGN KEY (商品ID) REFERENCES 商品表(商品ID) ON DELETE CASCADE
);
CREATE TABLE 销售总表 (
销售ID INT AUTO_INCREMENT PRIMARY KEY,
客户ID INT,
销售时间 DATETIME NOT NULL,
收银员 VARCHAR(50),
应收金额 DECIMAL(10, 2) NOT NULL,
实收金额 DECIMAL(10, 2) NOT NULL,
优惠金额 DECIMAL(10, 2),
备注 TEXT,
FOREIGN KEY (客户ID) REFERENCES 客户表(客户ID)
);
CREATE TABLE 销售明细表 (
销售明细ID INT AUTO_INCREMENT PRIMARY KEY,
销售ID INT,
商品ID INT,
数量 INT,
零售价 DECIMAL(10, 2),
促销价 DECIMAL(10, 2),
FOREIGN KEY (销售ID) REFERENCES 销售总表(销售ID) ON DELETE CASCADE,
FOREIGN KEY (商品ID) REFERENCES 商品表(商品ID) ON DELETE CASCADE
);
DELIMITER //
CREATE PROCEDURE insert_商品表(
IN p_商品名称 VARCHAR(255),
IN p_计量单位 VARCHAR(50),
IN p_零售价 DECIMAL(10, 2),
IN p_促销价 DECIMAL(10, 2)
)
BEGIN
INSERT INTO 商品表 (商品名称, 计量单位, 零售价, 促销价)
VALUES (p_商品名称, p_计量单位, p_零售价, p_促销价);
END //
DELIMITER ;
DELIMITER //
CREATE PROCEDURE insert_商品表(
IN p_商品名称 VARCHAR(255),
IN p_计量单位 VARCHAR(50),
IN p_零售价 DECIMAL(10, 2),
IN p_促销价 DECIMAL(10, 2)
)
BEGIN
INSERT INTO 商品表 (商品名称, 计量单位, 零售价, 促销价)
VALUES (p_商品名称, p_计量单位, p_零售价, p_促销价);
END //
DELIMITER ;
CALL insert_商品表('可口可乐', '瓶', 2.50, 2.30);
CALL insert_商品表('百事可乐', '瓶', 2.50, 2.30);
CALL insert_商品表('伊利牛奶', '盒', 5.20, 4.80);
CALL insert_商品表('农夫山泉', '瓶', 1.50, 1.30);
CALL insert_商品表('涪陵榨菜', '袋', 1.00, 0.80);
CREATE INDEX index_商品名称 ON 商品表(商品名称);
CREATE VIEW v_库存 AS
SELECT 商品表.商品名称, 库存表.数量
FROM 商品表
JOIN 库存表 ON 商品表.商品ID = 库存表.商品ID;
CREATE TRIGGER delete_销售记录
AFTER DELETE ON 销售总表
FOR EACH ROW
BEGIN
-- 删除与被删除销售记录相关的销售明细
DELETE FROM 销售明细表 WHERE 销售ID = OLD.销售ID;
-- 更新库存,基于被删除的销售明细中的商品和数量
UPDATE 库存表 k
JOIN (
SELECT 商品ID, SUM(数量) AS total_quantity
FROM 销售明细表
WHERE 销售ID = OLD.销售ID
GROUP BY 商品ID
) s ON k.商品ID = s.商品ID
SET k.数量 = k.数量 + s.total_quantity;
END //
DELIMITER ;