在过去的几天里,我试图在 MySQL 中编写一个存储过程,但在让它工作时遇到了一些麻烦。希望这里有人可以给我一些意见:)
我发布的示例是为 asp.Net 成员(member)提供程序创建一个新用户。我希望将电子邮件和密码发送到数据库并获得一个 int 返回值以验证 userdeatils 是否已写入数据库。
我使用 MySQL DB 5.1(我认为)并将 SQL 写入 Web 界面。
我有 2 个附带问题,有人也可以解释一下吗:) 1) 我使用分隔符,但不知道它的作用。 2)我不确定我是否必须做其他事情然后设置 autocommit = 0 以使事务工作,或者我是否必须这样做。
我知道我可以使用 IF/ELSE 语句而不是事务,但我想用一个语句来做,以了解它是如何工作的。 (我希望以后经常使用它)
我无法开始工作的代码:
DELIMITER //
CREATE DEFINER=`websharp_dk`@`%` PROCEDURE `CreateUser`(
IN _username VARCHAR(100),
IN _Password VARCHAR(100))
RETURNS INT
BEGIN
SET autocommit = 0;
DECLARE return_value INT;
BEGIN TRY
START TRANSACTION
INSERT INTO User
(Email
,Password
,Failed_Password_Count
,Creation_Date)
VALUES
(_username
,_Password
,0
,Datetime.Now())
SET return_value = 1;
COMMIT;
END TRY
BEGIN CATCH
ROLLBACK
SET return_value = 0;
END CATCH
BEGIN FINALLY
RETURN return_value;
END FINALLY
END//
DELIMITER ;
编辑: 我收到的错误消息是:
1064 - 您的 SQL 语法有误;检查与您的 MySQL 服务器版本对应的手册,了解在 'INT BEGIN SET autocommit = 0; 附近使用的正确语法。声明返回值 INT; ' 在第 4 行
最佳答案
要获得对事务的支持,请确保您使用的是 InnoDB 存储引擎而不是默认的 MyISAM。
就代码本身而言,我的第一个问题是,为什么要将单个查询包装在事务中?另外,您看到了什么错误?
关于mysql - 尝试学习 MySQL 和事务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1913285/