利用mysql触发器记录数据的插入和更新时间

本文介绍了如何使用SQL创建一个名为'catagory'的表,并设置了两个触发器:一个用于记录新插入的数据时间,另一个用于记录数据更新的时间。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

创建表catagory

CREATE TABLE `catagory` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(255) DEFAULT NULL,
  `create_time` datetime DEFAULT NULL,
  `update_time` datetime DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8

 

创建触发器create_time用于记录用户往catagory表插入数据的时间

DELIMITER $$

CREATE
    TRIGGER `lan`.`create_time` BEFORE UPDATE
    ON `lan`.`catagory`
    FOR EACH ROW BEGIN
	SET new.create_time=NOW();
    END$$

DELIMITER ;

 创建触发器update_time用于记录用户更新catagory表数据的时间

DELIMITER $$

CREATE
    TRIGGER `lan`.`update_time` BEFORE UPDATE
    ON `lan`.`catagory`
    FOR EACH ROW BEGIN
	SET new.update_time=NOW();
    END$$

DELIMITER ;

 

### 使用MySQL触发器更新数据表 #### 创建触发器的一般语法 创建触发器的通用语法结构如下[^2]: ```sql CREATE TRIGGER trigger_name {BEFORE | AFTER} {INSERT | UPDATE | DELETE} ON table_name FOR EACH ROW BEGIN -- 触发器逻辑处理 END; ``` 此语法允许指定触发器是在目标事件(`INSERT`, `UPDATE`, 或者 `DELETE`)发生前还是发生后执行。 #### 实现自动更新关联表的数据 假设存在两个表格:`orders` `customers`。每当订单(`orders`)被删除时,希望减少客户(`customers`)账户余额相应的金额。为此目的设计了一个名为 `reduce_balance_on_delete_order` 的触发器: ```sql DELIMITER $$ CREATE TRIGGER reduce_balance_on_delete_order AFTER DELETE ON orders FOR EACH ROW BEGIN UPDATE customers SET balance = balance - OLD.amount WHERE id = OLD.customer_id; END$$ DELIMITER ; ``` 上述代码片段展示了如何通过触发器,在每次从 `orders` 表中删除一条记录之后,相应地调整 `customers` 表内的余额字段值。这里的关键在于使用了 `OLD` 关键字访问已删除行的内容,并据此更新另一张表中的信息。 #### 数据验证示例 为了确保新插入更新后的价格总是正数,可以在 `products` 表上设置一个触发器来进行这样的检查: ```sql DELIMITER $$ CREATE TRIGGER validate_price_before_update_or_insert BEFORE INSERT OR UPDATE ON products FOR EACH ROW BEGIN IF NEW.price <= 0 THEN SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = 'Price must be positive'; END IF; END$$ DELIMITER ; ``` 这段脚本会在尝试向 `products` 插入或者更新任何一行之前运行,如果发现新的价格小于等于零,则抛出异常阻止该操作完成。 #### 日志记录功能 考虑建立一张专门的日志表 (`audit_log`) 来保存所有对重要业务实体 (比如 `employees`) 所做的变更历史。下面是一个简单的例子说明怎样利用触发器来填充这张日志表: ```sql -- 首先创建审计日志表 CREATE TABLE audit_log ( log_id INT AUTO_INCREMENT PRIMARY KEY, action VARCHAR(10), employee_id INT NOT NULL, changed_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ); DELIMITER $$ CREATE TRIGGER log_employee_changes AFTER UPDATE ON employees FOR EACH ROW BEGIN INSERT INTO audit_log(action, employee_id) VALUES ('UPDATED', OLD.id); END$$ DELIMITER ; ``` 当员工资料有任何变动时,这个触发器会自动生成一个新的条目加入到 `audit_log` 中去,从而留下完整的活动轨迹供后续审查之用。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值