我在为mysql编写数据库触发器时遇到麻烦。为简单起见,我将布置一个伪造的架构,然后告诉您触发器应该做什么:
Table A
id
status
base_id
Table B
id
status
A.base_id (foriegn key back to base_id)
在更新表A中的记录时,如果状态设置为三个值(4、5、6)之一,则触发器需要更新表B中与base_id匹配的所有记录。
这个问题要比这棘手得多,但这是问题的根源,我是数据库触发器的新手,而且似乎还无法解决。这些表非常大,因此需要“定位”触发器。换句话说,它不应在每次更新时都扫描整个表A,并相应地更新表B中的所有记录。它应该只更新表B中与触发触发器的单个更新行直接对应的记录。
任何帮助将不胜感激。
################### 33更新这是当前的触发器,但是无法编译。错误是““新”中的未知列“状态””
DELIMITER $$
CREATE TRIGGER db.after_tableA_update
AFTER UPDATE ON tableA
FOR EACH ROW
BEGIN
IF NEW.status IN (13,14,15) then
update tableB as b set b.task_status = 26 where b.match_id = NEW.match_id;
END IF;
END $$
DELIMITER ;
答案 0 :(得分:1)
这很简单,如果我理解您的正确的话。触发器的主体应与此类似:
setTimeout(this.functionName,1000)
但是,如果您只想在状态从另一个值设置为4,5,6时进行更新(还可以防止不必要的查询),则应将if语句更改为此:
axios.get('blablabla').then(response=>{//put the response into vue dataArrayName in data part});
只要您在表B的v-for="dataArrayName"
列上有索引并且有足够的内存来覆盖它,此更新查询将非常快速地工作。
注意:如果可以在应用程序代码中执行此操作,则应避免使用触发器。即使您在内部做一些非常简单的操作,mysql中的触发器也会大大降低性能。如果此表不经常更新,则没关系。