首先让我解释一下我的系统: 我每隔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