首先让我解释一下我的系统:我在两个系统上有两个相等的数据库,每 15 分钟将同步几个表的新数据。
为此,我将第一个数据库的最后一个主键与第二个数据库的最后一个主键进行比较。每个新数据都将通过 INSERT-Statement 插入到第二个数据库中。数据量将至少为 200 到 500 个数据集。带有数据库的服务器通过互联网连接。
问题:在第二个数据库上,我必须从不同表的两个值中计算一个值,并将其写入第三个数据库。所以我写了一个存储过程,并通过其中一个表上的触发器调用它。
但是带有触发器的表存储的数据少于第一个服务器上的等效数据。所以我认为存储过程的运行时会导致数据丢失。但为什么?在测试系统上它可以工作,但在生产过程中却不行。
另一个好奇是数据库的实际主键(自动增量整数)是相同的。但是第二个数据库包含的数据较少。
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