За последние пару дней я попытался написать Хранимую процедуру в MySQL, и у меня есть какой-то truble, чтобы заставить ее работать. Надеюсь, что кто-то здесь может дать мне какой-то вклад :)Попытка изучить MySQL и транзакции
Пример, который я отправляю для провайдера членства asp.Net, чтобы создать нового пользователя. Я ожидаю отправить электронную почту и пароль в БД и получить int return, чтобы проверить, что userdeatils был записан в БД.
Я использую MySQL DB 5.1 (я думаю) и записываю SQL в webinterface.
У меня есть 2 вопроса, может кто-то объяснить это тоже :): 1) Я использую DELIMITER, но не знаю, что он делает. 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 ;
Edit: Сообщение об ошибке я получаю:
Возможно, вы захотите написать более значимый заголовок для своего вопроса. –
Какая ошибка? Вам не нужно обматывать одно действие в транзакции, поэтому транзакция в этом случае вообще ничего не делает. –
Изменен заголовок, чтобы лучше описать проблему. – Jorn