我們有一個存儲過程「GetToken」,當用戶登錄到我們的網站時調用。此存儲過程生成一個GUID(將其返回給客戶端)並將條目插入到我們的「TokenIndex」表中。 GUID只在一段延長的時間內有效,所以每次用戶登錄時,我們都會生成一個新的GUID並刪除該特定用戶的所有以前的「TokenIndex」條目。我們遇到的問題是(它讓我們瘋狂)是刪除語句刪除「TokenIndex」表內的全部條目,就好像它忽略DELETE FROM TokenIndex
語句中的WHERE LoginID = loginId
子句。請參閱下面我們的存儲過程:MySQL存儲過程 - 刪除忽略'WHERE'子句
CREATE DEFINER=`arcanatekauth`@`%` PROCEDURE `GetToken`(
IN _username NVARCHAR(100),
IN _password TINYBLOB
)
BEGIN
declare guid CHAR(36);
declare clientId int;
declare loginId int;
declare clientConnectionString nvarchar(500);
Select li.ClientID, li.ID INTO clientId, loginId
FROM LoginIndex li
WHERE li.UserName = _username and li.Password = _password;
if(clientId > 0)
then
begin
SET guid = UUID();
DELETE FROM TokenIndex
WHERE LoginID = loginId;
SELECT ci.ConnectionString INTO clientConnectionString
FROM ClientIndex ci
WHERE ci.ID = clientId;
INSERT INTO TokenIndex (Token, LoginID, ConnectionString, ExpirationDtTm)
VALUES (guid, loginId, clientConnectionString, NOW() + INTERVAL 1 HOUR);
end;
end if;
select guid;
END
就在刪除之前,您可以發佈添加SELECT登錄ID的輸出loginId; –