商品(编号,品名,进价,库存,售价,厂商编号) 顾客(卡号,姓名,电话,积分) 厂商(编号,厂址,名称、电话) 销售(顾客卡号,商品编号,数量,日期) 建立商品的delete 触发器,只有当此商品没有人买时才可删除,若有销售记录不能删除。
时间: 2023-11-24 20:07:26 浏览: 27
下面是一个基于MySQL语法的实现:
首先,我们需要创建一个名为sales的表,用于存储销售记录,表结构如下:
```
CREATE TABLE sales (
customer_id INT,
product_id INT,
quantity INT,
date DATE,
FOREIGN KEY (customer_id) REFERENCES customers (id),
FOREIGN KEY (product_id) REFERENCES products (id)
);
```
接着,我们可以创建一个名为products的表,用于存储商品信息,表结构如下:
```
CREATE TABLE products (
id INT PRIMARY KEY,
name VARCHAR(255),
cost_price FLOAT,
stock INT,
selling_price FLOAT,
manufacturer_id INT,
FOREIGN KEY (manufacturer_id) REFERENCES manufacturers (id)
);
```
然后,我们需要创建一个名为manufacturers的表,用于存储厂商信息,表结构如下:
```
CREATE TABLE manufacturers (
id INT PRIMARY KEY,
address VARCHAR(255),
name VARCHAR(255),
phone VARCHAR(255)
);
```
最后,我们可以创建一个名为customers的表,用于存储顾客信息和积分,表结构如下:
```
CREATE TABLE customers (
id INT PRIMARY KEY,
name VARCHAR(255),
phone VARCHAR(255),
points INT
);
```
接下来,我们可以创建一个名为product_delete_trigger的触发器,用于在删除商品时检查是否有销售记录,如果有则阻止删除操作,触发器代码如下:
```
CREATE TRIGGER product_delete_trigger BEFORE DELETE ON products
FOR EACH ROW
BEGIN
DECLARE sales_count INT;
SELECT COUNT(*) INTO sales_count FROM sales WHERE product_id = OLD.id;
IF sales_count > 0 THEN
SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = 'Cannot delete product with sales history';
END IF;
END;
```
这样,当我们尝试删除某个商品时,如果该商品有销售记录,则会抛出一个错误,阻止删除操作。如果没有销售记录,则可以顺利删除该商品。