Транзакционные хранимые процедуры в MySQL
Выполнение нескольких операторов SQL транзакционным способом внутри хранимой процедуры гарантирует, что все операторы выполняются успешно или ни одного вообще выполнить. Такое поведение имеет решающее значение для поддержания согласованности и целостности данных. Вот как вы можете выполнять транзакции в хранимой процедуре MySQL:
Коррекция синтаксических ошибок
В предоставленном вами фрагменте кода есть две синтаксические ошибки, которые препятствуют выполнению хранимой процедуры. от превращения в транзакционный. Правильный синтаксис следующий:
DECLARE EXIT HANDLER FOR SQLEXCEPTION, SQLWARNING
BEGIN
ROLLBACK;
END;
Этот код объявляет обработчик выхода, который автоматически откатывает любые изменения, если во время выполнения хранимой процедуры возникает исключение или предупреждение SQL. Запятые между условиями обработчика выхода и точка с запятой в конце инструкции DECLARE имеют решающее значение для правильного функционирования хранимой процедуры.
Пример
Один раз синтаксические ошибки исправлены, хранимую процедуру можно сделать транзакционной, включив операторы SQL в блок START TRANSACTION...COMMIT. Вот пример транзакционной хранимой процедуры:
BEGIN
DECLARE EXIT HANDLER FOR SQLEXCEPTION, SQLWARNING
BEGIN
ROLLBACK;
END;
START TRANSACTION;
-- Your SQL statements here
COMMIT;
END
Использование
Чтобы использовать транзакционную хранимую процедуру, просто вызовите ее из кода приложения как обычную хранимую процедуру. Если все инструкции SQL в хранимой процедуре выполняются успешно, инструкция COMMIT сделает эти изменения постоянными в базе данных. Если произойдет какое-либо исключение или предупреждение SQL, оператор ROLLBACK автоматически отменит все изменения.
Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.
Copyright© 2022 湘ICP备2022001581号-3