【问题标题】:Multiple definitions in a single Mysql Trigger单个 Mysql 触发器中的多个定义
【发布时间】:2016-05-31 04:43:07
【问题描述】:

我创建了一个多页调查表,每页收集 1 到 10 的值。

使用该数据,我需要将 3 个不同的计算插入到数据库中的 3 个不同的列中。

我创建了一个触发器,它将 20 页中的所有数字相加并将其插入总分列,但我需要 2 个其他子量表分数,并且我的 mysql 版本限制 1 个触发器,每个表具有相同的操作。

是否可以有一个触发器可以将值插入 3 个不同的列?

我正在尝试通过 phpMyAdmin 执行此操作

我对总分的定义如下: [![在此处输入图片描述][1]][1]

SET NEW.total_score = NEW.answer_01 + NEW.answer_02 + NEW.answer_03 + NEW.answer_04 + NEW.answer_05 + NEW.answer_06 + NEW.answer_07 + NEW.answer_08 + NEW.answer_09 + NEW.answer_10 + NEW.answer_11 + NEW.answer_12 + NEW.answer_13 + NEW.answer_14 + NEW.answer_15 + NEW.answer_16 + NEW.answer_17 + NEW.answer_18 + NEW.answer_19 + NEW.answer_20;

【问题讨论】:

  • 你可以使用SET *your code*, new_column = new_value。所以你会像在更新子句中那样用逗号分隔列?
  • 或者。 SET NEW.col = expr1; SET NEW. col2 = expr2; SET NEW.col3 = expr3;.

标签: mysql triggers


【解决方案1】:

mysql 网站 - http://dev.mysql.com/doc/refman/5.7/en/trigger-syntax.html

mysql> CREATE TRIGGER ins_transaction BEFORE INSERT ON account
    -> FOR EACH ROW PRECEDES ins_sum
    -> SET
    -> @deposits = @deposits + IF(NEW.amount>0,NEW.amount,0),
    -> @withdrawals = @withdrawals + IF(NEW.amount<0,-NEW.amount,0);

逗号分隔列似乎是解决方案

所以对于您的代码,它会像...

SET NEW.total_score = NEW.answer_01 + ... + NEW.answer_20,
NEW.other_column = NEW.answer_01 + NEW.answer_02;

【讨论】:

  • 我们的两个解决方案都有效,冷静下来。这是他无法创建多个触发器的解决方案。只需在他的第一个 SET 末尾添加一个逗号并添加一些额外内容。我从来没有说过有优势。
  • 也感谢您的回复@specncer7593
猜你喜欢
  • 2012-12-18
  • 2013-09-02
  • 2013-01-28
  • 2019-02-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多