我正在创建一个表,用于存储用户上次登录/注销的时间。仅一行存储 ID、操作作为位字段以及时刻作为 DATETIME。我的想法是执行一个存储过程,以便在用户是新用户时进行插入,并在用户存在时进行更新。我已经完成了这段代码:
DELIMITER $$
CREATE PROCEDURE sp_LastAction(in id_in int, accion_in bit)
begin
SELECT @CONT:= IdUsuario FROM login WHERE IdUsuario = id_in;
IF NOT @CONT then
INSERT INTO login(IdUsuario, Fecha, Accion)
values (id_in, NOW(), accion_in);
ELSE
UPDATE login SET Fecha = NOW(), Accion = accion_in
WHERE IdUsuario = id_in LIMIT 1;
end IF;
end$$
DELIMITER ;
但是当我调用该过程时,它不会执行任何操作,只是将变量作为空字段返回。
最佳答案
您可以进行 UPSERT。
CREATE PROCEDURE `sp_LastAction`(id_in int, accion_in bit)
BEGIN
INSERT INTO `login` (`idusuario`, `fecha`, `accion`) VALUES (id_in, now(), accion_in)
ON DUPLICATE KEY UPDATE `fecha` = now(), `accion` = accion_in;
END //
这是一个示例:SQL Fiddle
关于mysql - MySQL 中带有条件变量的存储过程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19449677/