在数据库里建个触发器,加上when条件,给个示例
时间: 2023-05-20 21:07:07 浏览: 82
当数据库中的某个表发生特定的操作时,触发器可以自动执行一些操作。以下是一个示例,展示如何在MySQL数据库中创建一个触发器:
CREATE TRIGGER example_trigger
AFTER INSERT ON my_table
FOR EACH ROW
WHEN (NEW.column_name = 'value')
BEGIN
-- 执行操作
END;
在这个示例中,当my_table表中插入一行数据时,如果该行数据的column_name列的值为'value',则触发器会执行一些操作。
相关问题
我需要包含5个表的数据库代码,包含触发器,
好的,这里是一个包含5个表的MySQL数据库代码示例,其中包括触发器:
1. 客户表格
```mysql
CREATE TABLE customers (
id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(50) NOT NULL,
email VARCHAR(50) NOT NULL,
balance FLOAT NOT NULL DEFAULT 0,
purchased_books INT NOT NULL DEFAULT 0,
vip_level INT NOT NULL DEFAULT 0
);
```
2. 书籍表格
```mysql
CREATE TABLE books (
id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
title VARCHAR(50) NOT NULL,
author VARCHAR(50) NOT NULL,
price FLOAT NOT NULL,
inventory INT NOT NULL DEFAULT 0
);
```
3. 订单表格
```mysql
CREATE TABLE orders (
id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
customer_id INT NOT NULL,
total_amount FLOAT NOT NULL,
created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
FOREIGN KEY (customer_id) REFERENCES customers(id)
);
```
4. 订单详情表格
```mysql
CREATE TABLE order_items (
id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
order_id INT NOT NULL,
book_id INT NOT NULL,
quantity INT NOT NULL,
price FLOAT NOT NULL,
FOREIGN KEY (order_id) REFERENCES orders(id),
FOREIGN KEY (book_id) REFERENCES books(id)
);
```
5. 警报表格
```mysql
CREATE TABLE alerts (
id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
message VARCHAR(100) NOT NULL,
created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP
);
```
6. 触发器示例:在订单表格中,创建一个触发器,每当有新订单时,将订单总金额更新到客户的账户余额上。
```mysql
CREATE TRIGGER update_customer_balance
AFTER INSERT ON orders
FOR EACH ROW
BEGIN
UPDATE customers
SET balance = balance - NEW.total_amount
WHERE id = NEW.customer_id;
END;
```
7. 触发器示例:在书籍表格中,创建一个触发器,每当库存低于10本时,向管理员发送一条警报。
```mysql
CREATE TRIGGER low_inventory_alert
AFTER UPDATE ON books
FOR EACH ROW
BEGIN
IF NEW.inventory < 10 THEN
INSERT INTO alerts (message, created_at)
VALUES ('Low inventory for book ' + NEW.title, NOW());
END IF;
END;
```
8. 触发器示例:在客户表格中,创建一个触发器,每当客户购买一本书时,更新客户的购买数量,并将客户的VIP等级提升到更高的级别。
```mysql
CREATE TRIGGER update_customer_vip_level
AFTER INSERT ON order_items
FOR EACH ROW
BEGIN
UPDATE customers
SET purchased_books = purchased_books + 1,
vip_level = CASE
WHEN purchased_books >= 10 AND purchased_books < 20 THEN 1
WHEN purchased_books >= 20 AND purchased_books < 30 THEN 2
WHEN purchased_books >= 30 THEN 3
ELSE vip_level
END
WHERE id = NEW.customer_id;
END;
```
这些代码示例可以作为参考,实际应用需要根据具体情况进行修改。请注意,一些约束、索引和默认值可能需要根据具体需求进行修改。
我需要数据库触发器的代码
好的,以下是一个简单的MySQL数据库触发器代码示例:
1. 在订单表格中,创建一个触发器,每当有新订单时,将订单总金额更新到客户的账户余额上。
```mysql
CREATE TRIGGER update_customer_balance
AFTER INSERT ON orders
FOR EACH ROW
BEGIN
UPDATE customers
SET balance = balance - NEW.total_amount
WHERE id = NEW.customer_id;
END;
```
2. 在书籍表格中,创建一个触发器,每当库存低于10本时,向管理员发送一条警报。
```mysql
CREATE TRIGGER low_inventory_alert
AFTER UPDATE ON books
FOR EACH ROW
BEGIN
IF NEW.inventory < 10 THEN
INSERT INTO alerts (message, created_at)
VALUES ('Low inventory for book ' + NEW.title, NOW());
END IF;
END;
```
3. 在客户表格中,创建一个触发器,每当客户购买一本书时,更新客户的购买数量,并将客户的VIP等级提升到更高的级别。
```mysql
CREATE TRIGGER update_customer_vip_level
AFTER INSERT ON order_items
FOR EACH ROW
BEGIN
UPDATE customers
SET purchased_books = purchased_books + 1,
vip_level = CASE
WHEN purchased_books >= 10 AND purchased_books < 20 THEN 1
WHEN purchased_books >= 20 AND purchased_books < 30 THEN 2
WHEN purchased_books >= 30 THEN 3
ELSE vip_level
END
WHERE id = NEW.customer_id;
END;
```
这些代码示例演示了如何在MySQL中创建触发器。请注意,这些代码示例仅供参考,实际应用需要根据具体情况进行修改。