MYSQL 触发器 - 在插入之前从其他表更新表中的值

标签 mysql triggers

我正在尝试的是在从另一个表插入之前更新一个值 - 这是我得到的:

2 张 table

hbrpg_geo{
...
id INT       //id that needs to be written into hbrpg_person
zip VARCHAR(10) //contains postcode
...
}

hbrpg_person{
...
 fk_postcode     // initially it's filled with UK postcode - but trigger should change value to id of hbrpg_geo of matching postcode (hbrpg_geo.zip). 
...
}

触发器:

...

BEGIN
    DECLARE NP_VAR integer;
    DECLARE OP_VAR TEXT;
    SET OP_VAR = NEW.fk_postcode;
    SET TE_VAR = OP_VAR;
    SELECT hbrpg_geo.id INTO NP_VAR FROM hbrpg_geo WHERE hbrpg_geo.zip = OP_VAR;
    SET NEW.fk_postcode = NP_VAR;
END

这一切似乎都在工作:

SET OP_VAR = NEW.fk_postcode;

如果我将 NEW.fk_postcode 替换为引号中的有效英国邮政编码(即:“W1 3XX”),则它可以正常工作,并且触发器会将字段 fk_postcode 替换为 hbrpg_geo 表的 id。

我做错了什么?如何将 NEW.fk_postcode 的值分配给我刚刚声明的变量?

最佳答案

您有作业的顺序:

SET OP_VAR = NEW.fk_postcode;
. . .
SET NEW.fk_postcode = NP_VAR;

new.fk_postcode具有相同的类型。但这些列分别是 textinteger

您需要修复类型不兼容性。我的猜测是,fk_postcode 实际上是一个整数,并且与值(可能是一个字符串)分开。

关于MYSQL 触发器 - 在插入之前从其他表更新表中的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17538820/

相关文章:

mysql - 如何从 BEFORE UPDATE 触发器内的同一个表中检索计数

sql - ms-access:从另一个查询中选择

PHP Reforce 搜索引擎

mysql - 触发更新其他表的计数

mysql - 在数据库触发器上执行 php 脚本

sql-server - TSQL 使触发器静默失败

mysql - 这个触发器有什么问题?

MySQL:information_schema 的 TABLE_ROWS 列和 count(*) 不同

mysql - 针对可变深度数据的 mysql 数据库的最佳设置

mysql - MySQL如何实现时间向上兼容?