【问题标题】:SQL Trigger affect just the first recordSQL 触发器只影响第一条记录
【发布时间】:2019-10-21 01:59:08
【问题描述】:

我有一个名为movimentacoes 的触发器,当将新记录添加到mov 表时,此触发器应增加cooperados 表中的integralizadas 列。实际上确实如此,但只是cooperados表中的第一条记录

这是我的触发器

DELIMITER $$

CREATE TRIGGER movimentacoes AFTER INSERT ON mov
FOR EACH ROW
BEGIN
    UPDATE cooperados c
        SET integralizadas = c.integralizadas + new.valor
    WHERE c.id = new.id_coop;


END;

$$

DELIMITER ;

合作伙伴表

id            | bigint(20) PRI  NULL    auto_increment
created_at    | timestamp       NULL    
updated_at    | timestamp       NULL    
nameCoop      | varchar(255)    NULL    
numCoop       | int(11)         NULL    
cpfCoop       | varchar(11)     NULL    
dtCad         | date            NULL    
dtDem         | date            NULL    
description   | text            NULL    
subscritas    | decimal(6,2)    NULL    
integralizadas| decimal(6,2)    NULL    
aintegralizar | decimal(6,2)    NULL    
status        | enum('ativo','inativo')

移动表

idMov       bigint(20) PRI  NULL    auto_increment
created_at  timestamp       NULL    
updated_at  timestamp       NULL    
id_coop     bigint(20)      NULL    
valor       decimal(6,2)    NULL    

触发器仅在cooperado.id 为 1 时起作用

【问题讨论】:

  • 你能补充一些关于这两个表的信息吗?
  • just to the first record 是什么意思?触发器将更新所有与where 子句匹配的记录。
  • 如果您尝试在 cooperados 表上更新一个不同于 1 的 id 会发生什么? cooperados 表是否有其他 id 的记录?如果没有,则更新无法进行,需要先插入记录。
  • 我可以手动更新表cooperados没有问题,不管id是什么,但是只有当我在id 1中设置新记录时才会激活触发器

标签: mysql sql triggers


【解决方案1】:

所以,我找到了答案,因为我的integralizadas 列是空的,我的触发器无法影响它,现在我的cooperados 表是这样的:

id            | bigint(20) PRI  NULL    auto_increment
created_at    | timestamp       NULL    
updated_at    | timestamp       NULL    
nameCoop      | varchar(255)    NULL    
numCoop       | int(11)         NULL    
cpfCoop       | varchar(11)     NULL    
dtCad         | date            NULL    
dtDem         | date            NULL    
description   | text            NULL    
subscritas    | decimal(6,2)    NULL    
integralizadas| decimal(6,2)    NOT NULL <--    
aintegralizar | decimal(6,2)    NULL    
status        | enum('ativo','inativo')

大家

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-03-06
    • 1970-01-01
    • 2011-02-07
    • 1970-01-01
    • 2022-08-22
    • 2011-10-23
    • 2011-10-23
    • 1970-01-01
    相关资源
    最近更新 更多