【问题标题】:Trigger updating value before insert by multicating two columns通过将两列相乘,在插入前触发更新值
【发布时间】:2018-02-07 17:34:47
【问题描述】:

我必须先用触发器修改插入数据的值。这是我的触发器:

DROP TRIGGER IF EXISTS `Calcul_conso`;CREATE DEFINER=`root`@`localhost` TRIGGER `Calcul_conso` BEFORE INSERT ON `data` FOR EACH ROW begin 
...
DECLARE multiplicateur FLOAT DEFAULT 1;
...

SELECT multiplicateur, calcul_conso into multiplicateur, c_c from capteur where sensor_number = NEW.sensor_number;

SET NEW.value = NEW.value * multiplicateur;
...
end

我有以下结构:

俘虏

sensor_number (Primaire) varchar(64) 非
nom varchar(150) Oui NULL
乘法浮点非 1

数据

id (Primaire) int(11) 非
sensor_number varchar(64) 非
值 float Oui NULL
日期日期时间非

我尝试了一个简单的 * 来相乘,但它似乎不起作用。

示例:

new.value = 153265000 和乘法器 = 0.001

【问题讨论】:

  • '我尝试了一个简单的 * 来相乘,但它似乎不起作用'是什么让你这么认为?
  • 值未更新。当我从选择中执行此操作时,它运行良好,但从我的触发器中,它不起作用
  • 触发器的代码段没有具体语法 c_c 未声明,calcul_censo 来自哪里?
  • 不要有与列名同名的变量名mysql不会猜到你的意图。
  • 你检查我的答案了吗?

标签: mysql sql triggers


【解决方案1】:

您的 select 语句看起来错误,您不应声明与列名同名的变量。

DROP TRIGGER IF EXISTS `Calcul_conso`;
delimiter $$
CREATE TRIGGER `Calcul_conso` BEFORE INSERT ON t 
FOR EACH ROW 
begin 

DECLARE vmultiplicateur FLOAT DEFAULT 1;

SELECT multiplicateur into vmultiplicateur from capteur where sensor_number = NEW.sensor_number;

SET NEW.value = NEW.value * vmultiplicateur;
end $$

delimiter ;

给定

drop table if exists capteur;
create table capteur
(sensor_number  varchar(64) ,
nom varchar(150) ,
multiplicateur float default 1
)
;

drop table if exists t;
create table t
(id int(11) ,
sensor_number varchar(64),
value float ,
date datetime);

insert into capteur values (1,'aaa',2);

insert into t values (1,1,10,'2018-01-01');

结果

ariaDB [sandbox]> select * from t;
+------+---------------+-------+---------------------+
| id   | sensor_number | value | date                |
+------+---------------+-------+---------------------+
|    1 | 1             |    20 | 2018-01-01 00:00:00 |
+------+---------------+-------+---------------------+
1 row in set (0.00 sec)

【讨论】:

    猜你喜欢
    • 2013-09-07
    • 1970-01-01
    • 2012-04-13
    • 2015-11-06
    • 2021-08-28
    • 2014-05-30
    • 2021-10-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多