1

REPLACE INTO在我的数据库中完成了一项操作,但我希望仅当该 P_ID 在同一个表中的时间少于 10 分钟时才会发生。

table_a

P_ID    CHECK   DATETIME
===================================
10      1       2013-06-27 13:23:23
5       0       2013-06-24 11:14:02

::

REPLACE INTO table_a (P_ID,CHECK,DATETIME) VALUES ('5','1','2013-06-24 11:10:00');

所以,我希望这种替换不会发生,因为距离上次更新还不到 10 分钟。

这可能吗?还是需要另一个查询?

4

1 回答 1

1

UPDATE1:您可以将您的包装REPLACE INTO成一个存储过程

DELIMITER $$
CREATE PROCEDURE sp_replace(IN pid INT, IN chk INT, IN dt DATETIME)
BEGIN
  IF 10  < COALESCE(TIMESTAMPDIFF(MINUTE, 
            (SELECT datetime FROM table_a WHERE p_id = pid), dt), 11) THEN
    REPLACE INTO table_a (p_id, `check`, datetime) VALUES (pid, chk, dt);
  END IF;    
END$$
DELIMITER ;

这是SQLFiddle演示

假设它P_ID有唯一的约束,你可以用INSERT ... SELECT ... ON DUPLICATE KEY UPDATE它来做这样的工作

INSERT INTO table_a (p_id, `check`, datetime)
SELECT 5, 1, '2013-06-24 11:10:00'
  FROM table_a
 WHERE 10 < COALESCE(TIMESTAMPDIFF(MINUTE, '2013-06-24 11:00:00', 
           (SELECT datetime FROM table_a WHERE p_id = 5)), 11)
    ON DUPLICATE KEY UPDATE `check` = VALUES(`check`), datetime = VALUES(datetime);

这是SQLFiddle演示

注意:两者REPLACE INTOINSERT INTO ON DUPLICATE KEY更改自动递增的主键(在您的情况下为 f_id)

于 2013-06-26T21:45:23.250 回答