我创建了以下MySql存储过程,它完全可以正常工作:
DELIMITER //
CREATE PROCEDURE UpsertContactable(
IN Email VARCHAR(254),
IN ServerId INT(11),
IN Contactable BOOLEAN,
IN LastUpdate TIMESTAMP
)
BEGIN
DECLARE cnt INT DEFAULT 0;
SELECT COUNT(*) INTO cnt
FROM Contactable
WHERE Contactable.Email = Email
AND Contactable.Server__ = ServerId;
IF ( cnt > 0 ) THEN
UPDATE Contactable
SET Contactable.Contactable = Contactable,
Contactable.Last_Update = LastUpdate
WHERE Contactable.Email = Email
AND Contactable.Server__ = ServerId
AND Contactable.Last_Update < LastUpdate;
ELSE
INSERT INTO Contactable (`Email`, `Server__`, `Contactable`, `Last_Update`)
VALUES (Email, ServerId, Contactable, LastUpdate);
END IF;
END //
DELIMITER ;
不幸的是,我公司反对使用存储过程。
我知道可以通过两次调用数据库来重写这个(我正在使用PHP)(即一个用于计算cnt
,另一个用于执行insert
或{{1} })。
但考虑到要处理的数据量,我想避免额外的数据库往返。
是否可以每行发送一个唯一的语句来处理并执行与该过程相同的操作,而不使用此过程?