试图学习mysql和交易
-
19-09-2019 - |
题
在过去的几天中,我试图在MySQL中编写一个存储过程,并且我有一些很糟糕的方法使它变得工作。希望这里有人可以给我一些投入:)
我发布的示例是为ASP.NET成员资格提供商创建新用户的示例。我希望将电子邮件和密码发送到数据库,并获得INT返回,以验证用户发展是否已写入DB。
我使用MySQL DB 5.1(我认为)并将SQL写入Webinterface。
我得到了两个侧面问题,有人也可以解释一下:):1)我使用一个定界线,但不知道它的作用。 2)我不确定我是否必须做其他事情,然后设置自动化= 0才能使交易工作,或者我什至必须这样做。
我知道我本可以使用IF / Els语句而不是交易,但想与一个人一起来找出其工作原理。 (我希望以后使用很多)
我无法使用的代码:
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 Server版本相对应的手册,以获取正确的语法,以便在'int begin obles set autocommit = 0;声明return_value int; '在第4行
没有正确的解决方案
其他提示
要获得交易的支持,请确保您使用InnoDB存储引擎,而不是默认的Myisam。
至于该代码本身,我的第一个问题是,为什么要在交易中包装该查询?另外,您看到什么错误?
该定界符重新定义了您用来结束SQL语句的字符序列。整个创建过程是一个重要的声明,您需要告诉MySQL它以某物结尾(通常为';')。但是,由于您在创建过程语句的“正文”(在开始和结束之间)中有许多其他陈述,所有这些都需要结束,因此您还需要重新定义定义符,因此您不会在此处结束创建过程语句第一的 ';'。
在不重新定义定界符的情况下,MySQL会认为创建过程语句看起来像这样,然后开始新的语句:
CREATE DEFINER=`websharp_dk`@`%` PROCEDURE `CreateUser`(
IN _username VARCHAR(100),
IN _Password VARCHAR(100))
RETURNS INT
BEGIN
SET autocommit = 0;
使用定界符;在脚本的末尾,将定界符更改为';尽管这样做是一个好习惯,但不需要。
不隶属于 StackOverflow