mysql - MySQL 中带有条件变量的存储过程

标签 mysql variables stored-procedures

我正在创建一个表,用于存储用户上次登录/注销的时间。仅一行存储 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/

相关文章:

mysql - 错误 #1064 - MySQL 子查询中的 SQL 语法有错误

php - 显示头部搜索结果及其子结果

java - 是否可以使用 JAVA 中保存变量名称的字符串来访问变量?

javascript - javascript 的最佳实践大小写样式是什么?为什么?

mysql - 在 MySQL 存储过程中创建 View 并集

mysql - 如何在mysql中插入一些公式?

php - 如何管理数据量有限的数据库

javascript - Jquery触发/点击 anchor 标记点击变量

mysql - 是否允许在 mysql 5.7 中的其他程序中创建一个程序

mysql - 在 MySQL 存储过程中创建的临时表的范围