mysql - 创建触发器,在更新表后自动更新列

标签 mysql database database-design triggers mysql-workbench

我有一个如下所示的表格:

|idAvailability|SumRooms|AvailableRooms|可用率|

除了AvailabilityRate 是float 之外,所有内容都是int。 我想创建一个触发器,当更新AvailableRooms列时,由于触发器的存在,AvailabilityRate列也会自动更新。

这就是我到目前为止所做的。

CREATE TRIGGER availability_BEFORE_UPDATE
BEFORE UPDATE ON availability
FOR EACH ROW
BEGIN
  update availability
    set new.AvailabilityRate = new.AvailableRooms/new.SumRooms;
END

但它引发了我这个错误:

执行: 更新 ergasia.availability SET availableRooms=15 WHERE idAvailability=1;

错误 1442: 1442: 无法更新存储函数/触发器中的表可用性,因为它已被调用此存储函数/触发器的语句使用。 SQL语句: 更新 ergasia.availability SET availableRooms=15 WHERE idAvailability=1

最佳答案

您无法更新执行触发器的同一个表。由于您使用的是before update,因此您需要设置AvailabilityRate

new

因此触发器变为

delimiter //
CREATE TRIGGER availability_BEFORE_UPDATE BEFORE UPDATE ON availability 
FOR EACH ROW 
 BEGIN 
  set new.AvailabilityRate=new.AvailableRooms/new.SumRooms;
 END;//
delimiter;

关于mysql - 创建触发器,在更新表后自动更新列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30220833/

相关文章:

sql - 选择查询的良好性能的主键选择

mysql - Codeigniter - 在同一查询上结合获取和更新

php - 在 Homestead 不清楚的全新 Laravel 安装中连接到 MySQL

mysql - 如何创建 "following"表?

php - 面临将值放入聊天页面 php 的问题

sql - 将权重存储在数据库表中

mysql - 在表中插入行时的外键约束

mysql - CakePHP 查找所有生成返回重复记录(具有相同 ID)的 SQL。查找列表没有

database - 如何在文件系统中存储图像

database-design - 推荐一个偶尔使用的好的实体关系图构建工具?