2

我正在做一个存储用户最后一次登录/注销的表格。只有一行存储一个 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 ;

但是当我调用该过程时,它什么也不做,只是将变量作为 void 字段返回。

4

1 回答 1

4

你可以做一个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

于 2013-10-18T12:46:18.927 回答