3

我正在考虑在我的数据库中使用触发器来跟踪预订的变化。每次添加预订时,我都会在表格中添加一个点,该表格在“任期”中保持得分。

当我运行这个命令时,我可以在添加触发器之前更改 id。

UPDATE bookit SET prov_id = 32 where book_id=2;

添加以下触发器后,我无法更新 prov_id 并收到此错误

1054 - 'where 子句'中的未知列'bookit.prov_id'

扳机:

  delimiter //

 CREATE TRIGGER update_tenure_it BEFORE
 
 UPDATE ON bookit FOR EACH ROW

 BEGIN


 if(new.prov_id<>old.prov_id) THEN

 UPDATE provider_score set tenure=(tenure+1) where bookit.prov_id=provider_id;

 END IF;

 END;

 //

你知道我做错了什么以及问题出在哪里吗?我什至应该考虑使用触发器进行此类操作还是只在 PHP 中编写代码?谢谢!

4

2 回答 2

1

TABLENAME.FIELD在触发器中,您无法通过;直接访问表。相反,更新触发器分别为您提供old.* 和new.* 作为更新触发之前和之后的行的别名。在这种情况下,以下应该起作用:

 delimiter //

 CREATE TRIGGER update_tenure_it BEFORE

 UPDATE ON bookit FOR EACH ROW

 BEGIN


 if(new.prov_id<>old.prov_id) THEN

 UPDATE provider_score set tenure=(tenure+1) where new.prov_id=provider_id;

 END IF;

 END;

 //
于 2012-04-09T21:31:15.497 回答
0

您的更新需要在 bookit 表中加入您正在更新的 provider_score 表。现在它只是参考了 bookit 悬空。

于 2012-04-09T20:23:28.637 回答