两次插入MYSQL的存储过程

两次插入MYSQL的存储过程,mysql,stored-procedures,Mysql,Stored Procedures,我在MySQL中有一个存储过程: CREATE PROCEDURE c_ranges( _nombre VARCHAR(100), _limiteinferior DECIMAL(10,2), _limitesuperior DECIMAL(10,2) ) BEGIN DECLARE _newID INT; SELECT MAX(idrango)+1 FROM rango INTO _newID; IF (_newID IS NULL) THEN

我在MySQL中有一个存储过程:

CREATE PROCEDURE c_ranges(
    _nombre VARCHAR(100),
    _limiteinferior DECIMAL(10,2),
    _limitesuperior DECIMAL(10,2)
)
BEGIN
    DECLARE _newID INT;
    SELECT MAX(idrango)+1 FROM rango INTO _newID;
    IF (_newID IS NULL) THEN
        SET _newID = 0;
    END IF;
    INSERT INTO rango (idrango,nombre,limiteinferior,limitesuperior)
    VALUES(_newID,_nombre,_limiteinferior,_limitesuperior);
    SELECT idrango FROM rango WHERE idrango=_newID;
END //
当我这样运行它时:

CALL c_ranges("My range",0,10.3)
它两次插入同一条记录,但第二次插入的id增加了一

这是使用存储过程多次尝试插入后表的内容

第一次尝试:
调用c_范围(“第一范围”,0,0)

第二次尝试:
调用c_范围(“第二范围”,0,0)

第三次尝试:
调用c_范围(“第三范围”,0,0)


我真的很不安,有人能告诉我会发生什么吗?

我最近遇到了这种情况。发生在我身上的是,由于我自己的逻辑,我代码中调用存储过程的方法执行了两次。我知道,这很愚蠢,但确实是
我的验证将评估存储过程响应的结果,并根据该结果管理检索空JSON或响应JSON的流。我的错误是两次运行该方法,而不是存储响应,然后运行验证。就像这样

我做错了什么

return (string.IsNullOrEmpty(data.callProcedure("copyData")) ? "{}" : data.callProcedure("copyData"));
我该怎么做

string response = data.callProcedure("copyData");
return (string.IsNullOrEmpty(response) ? "{}" : response));

希望有帮助

原因:phpMyAdmin问题

如中@ZamronyP.Juhara所述,这种情况可能发生

在PhpMyAdmin的SQL命令输入中运行
时调用aStoredProc()
。它两次调用它们,导致创建了两个记录。如果从PhpMyAdmin->Database->Routine->execute或从MySQL命令行执行,则不会发生此问题


我只是在通过phpMyAdmin 4.0.4.2测试存储过程时遇到了这种行为。

我在本地测试了它。它工作正常。可能是您错误地执行了两次Ankit Agrawal,我不这么认为,我已经执行了30次,我猜可能是phpMyAdmin,但今天我完成了,10小时的连续工作对我来说太多了。无论如何,非常感谢您的时间和考虑。这与您的问题无关,但您可以通过将idrango设置为自动增量来优化您的过程,然后将您的过程编辑为:开始插入rango(nombre,limiteinferor,limitesuperior)值(_nombre,_limiteinferor,_limitesuperior);通过idrango desc limit 1从rango订单中选择idrango;谢谢你,Imanez,我会考虑你的建议。事实上问题是PHPMyADmin,100%测试。