存储过程并触发MySQL丢失的数据

时间:2013-08-08 09:18:19

标签: mysql stored-procedures triggers auto-increment

首先让我解释一下我的系统: 我每隔15分钟在两个系统上有两个相同的数据库,几个表的新数据将被同步。

为此,我将第一个数据库的最后一个主键与第二个数据库的最后一个主键进行比较。每个新数据都将通过第二个数据库中的INSERT-Statement插入。数据量至少为200到500个数据集。具有数据库的Severs通过互联网连接。

问题: 在第二个数据库上,我必须从不同的表中计算出两个值中的值,并将其写入第三个数据库中。 所以我编写了一个存储过程,并通过其中一个表上的触发器调用它。

但是带有触发器的表存储的数据少于第一个服务器上的等效数据。 所以我认为存储过程的运行时会导致数据丢失。但为什么? 在测试系统上,它可以工作但不是在生产过程中。

另一个好奇心是数据库的实际主键(自动增量整数)是相同的。但第二个数据库包含的数据较少。

CREATE DEFINER=`root`@`%` PROCEDURE `calcSigma`(IN `val1` DOUBLE(10,2), IN `ident` VARCHAR(20), IN `id` INT(11), IN `ts` DATETIME)
BEGIN   
DECLARE phi, theta, sigma double DEFAULT 0; 
IF ident='x_theta' THEN
    SET theta = val1;
    SET phi = (SELECT
    val
    FROM
    x_phi
    WHERE
    sensors_id = id
    AND 
    HOUR(
        TIMEDIFF(
            ts, ts_rised))='0'
    AND
    MINUTE(
        TIMEDIFF(
            ts, ts_rised))='0'
    ORDER BY
    ts_rised
    DESC LIMIT 1);  END IF;
IF theta<>0 && phi<>0 THEN
    IF theta >= 0 THEN
        SET sigma =(((phi/100)*(288.68*POW(1.098+(theta/100),8.02)))/(461.5*(theta+273.15)));
    ELSEIF theta < 0 THEN
        SET sigma =(((phi/100)*(4.689*POW(1.486+(theta/100),12.3)))/(461.5*(theta+273.15)));
    END IF;

    INSERT INTO 
    x_sigma (ts_rised, val, sensors_id) 
    VALUES (ts, sigma, id);
END IF;
END

0 个答案:

没有答案