Обработка ошибок MySQL в хранимых процедурах

В этой статье мы расскажем вам, как использовать обработчик MySQL для обработки исключений или ошибок, возникающих в хранимых процедурах.

При возникновении ошибки внутри хранимой процедуры, важно исправить ее соответствующим образом, например, продолжая или останавливая исполнение операции и выдавая сообщение об ошибке.

MySQL предоставляет простой способ определить обработчики, которые обрабатывают ошибки, исходя из общих условий, таких как предупреждения или исключения из условий, например, конкретные коды ошибок.

Объявление обработчика

Чтобы объявить обработчик мы используем оператор DECLARE HANDLER :

action может принимать следующие значения:

condition_value задает конкретное условие или класс условия, которые активируют обработчик.

condition_value может принимать одно из следующих значений:

Примеры обработки ошибок MySQL

Давайте рассмотрим несколько примеров объявления обработчиков.

Обработчик, приведенный ниже, означает: когда происходит ошибка, устанавливается значение переменной has_error 1 и выполнение продолжается:

Ниже приводится другой обработчик, который означает, что в случае возникновении любой ошибки, производится откат предыдущей операции, выдается сообщение об ошибке и осуществляется выход из текущего блока кода.

Если вы объявляете его внутри блока BEGIN END хранимой процедуры, он немедленно завершает хранимую процедуру:

Пример обработчика MySQL в хранимых процедурах

В таблице article_tags хранятся связи между статьями и тегами. К каждой статье может относиться несколько тегов и наоборот.

В результате, мы все равно получили список тегов для статьи:

Теперь, мы можем попробовать добавить дубликат ключа, чтобы увидеть результат:

Приоритет обработчиков MySQL

В случае если у вас есть несколько обработчиков, которые имеют право обрабатывать ошибку, MySQL для обработки ошибки будет вызывать наиболее подходящий обработчик.

Предположим, что в хранимой процедуре insert_article_tags_3 мы объявляем три обработчика:

Теперь мы пробуем добавить в таблицу article_tags дубликат ключа через вызов хранимой процедуры:

Как видите, вызывается обработчик кода ошибки MySQL :

Использование проименованных условий ошибки

Начинаем с объявления обработчика ошибки:

Синтаксис оператора DECLARE CONDITION выглядит следующим образом:

Таким образом, мы можем переписать код, приведенный выше, следующим образом:

Этот код, очевидно, более удобен для чтения, нежели предыдущий. Отметим, что объявление условия должно размещаться перед объявлением обработчика или объявлением курсора.

Код ошибки MySQL: 1175 во время UPDATE в MySQL Workbench

Это дает мне следующую ошибку:

Вы используете безопасный режим обновления, и вы пытались обновить таблицу без WHERE, который использует столбец KEY. Чтобы отключить безопасный режим, переключите параметр.

ОТВЕТЫ

Ответ 1

Я нашел ответ. Проблема заключалась в том, что я должен предшествовать имени таблицы с именем схемы. то есть команда должна быть:

Ответ 2

Похоже, ваш сеанс MySql имеет параметр safe-updates. Это означает, что вы не можете обновлять или удалять записи без указания ключа (например, primary key ) в предложении where.

Или вы можете изменить свой запрос, чтобы следовать правилу (используйте primary key в where clause ).

Ответ 3

Перед выполнением команды UPDATE выполните следующие действия: В Workbench MySQL

стр., нет необходимости перезапускать демон MySQL!

Ответ 4

Ответ 5

Все, что необходимо: Запустите новый запрос и запустите:

Затем: Запустите запрос, который вы пытались запустить, который ранее не работал.

Ответ 6

Нет необходимости устанавливать SQL_SAFE_UPDATES в 0, я бы очень не рекомендовал делать это таким образом. SAFE_UPDATES по умолчанию включен для ПРИЧИНЫ. Вы можете управлять автомобилем без ремней безопасности и прочего, если вы понимаете, что я имею в виду;) Просто добавьте в предложение WHERE значение KEY, которое соответствует всему, как первичный ключ, по сравнению с 0, поэтому вместо записи:

Теперь вы можете быть уверены, что каждая запись (ВСЕГДА) обновляется, как вы ожидаете.

Ответ 7

Код ошибки: 1175. Вы используете безопасный режим обновления, и вы попытались обновить таблицу без WHERE, которая использует столбец KEY. Чтобы отключить безопасный режим, переключите опцию в Preferences → Editor SQL и снова подключите.

Отключить «Безопасный режим обновления»

Отключить «Безопасный режим обновления» навсегда

Mysql workbench 8.0:

enter image description here Старая версия может:

Ответ 8

Настройки.

Безопасные обновления Перезапустить сервер

Ответ 9

Установите флажок SQL Queries и снимите флажок Safe Updates

Теперь выполните свой SQL-запрос

Ответ 10

Если вы находитесь в безопасном режиме, вам нужно указать id в разделе where. Так что-то вроде этого должно работать!

Ответ 11

В этом случае можно использовать: SET SQL_SAFE_UPDATES=0;

Ответ 12

В WorkBench я решил ее, отключив безопасный режим обновления:

-Edit → Настройки → Sql Editor, затем снимите флажок Безопасное обновление.

Ответ 13

Ответ 14

Простейшим решением является определение предела строки и выполнения. Это делается в целях безопасности.

Ответ 15

Поскольку вопрос был дан ответ и не имел никакого отношения к безопасным обновлениям, это может быть неправильное место; Я отправлю только для добавления информации.

Я старался быть хорошим гражданином и модифицировал запрос, чтобы использовать временную таблицу идентификаторов, которые будут обновляться:

Failure. Изменено обновление до:

Ответ 16

Правда, это бессмысленно для большинства примеров. Но, наконец, я пришел к следующему утверждению, и он отлично работает:

Ответ 17

Это для Mac, но должно быть одинаковым для других ОС, кроме местоположения настроек.

Ошибка, возникающая при попытке выполнить небезопасную операцию DELETE

Click on preferences when you get this error

В новом окне снимите флажок » Safe updates

Uncheck the safe updates

Затем закройте и снова откройте соединение. Не нужно перезапускать службу.

Теперь мы снова попробуем DELETE с успешными результатами.

enter image description here

Так что же это за безопасные обновления? Это не зло. Об этом говорит MySql.

Безопасно включать эту опцию при работе с производственной базой данных. В противном случае вы должны быть очень осторожны, не случайно удаляя важные данные.

Источники:

https://www. internet-technologies. ru/articles/obrabotka-oshibok-mysql-v-hranimyh-procedurah. html

https://utyatnishna. ru/info/16826/mysql-error-code-1175-during-update-in-mysql-workbench

Понравилась статья? Поделиться с друзьями:
Добавить комментарий

;-) :| :x :twisted: :smile: :shock: :sad: :roll: :razz: :oops: :o :mrgreen: :lol: :idea: :grin: :evil: :cry: :cool: :arrow: :???: :?: :!: