Ошибка в MySQL Workbench «Error Code: 1175». Причины и как исправить

Приветствую Вас на сайте Info-Comp.ru! Сегодня мы рассмотрим ситуацию, когда в среде MySQL Workbench при выполнении запроса на обновление (UPDATE) или удаление (DELETE) возникает ошибка «Error Code: 1175. You are using safe update mode». Мы поговорим о причинах возникновения этой ошибки, а также о том, как устранить эту ошибку.

Ошибка в MySQL Workbench «Error Code: 1175»

Причины возникновения ошибки «Error Code: 1175» в MySQL Workbench

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

Дело в том, что по умолчанию в MySQL включен режим «Безопасных обновлений» – Safe Updates Mode.

Данный режим предполагает обязательное использование в условии WHERE первичного ключа или указание оператора LIMIT.

Сделано это для того, чтобы уберечь начинающих от случайных изменений данных в таблицах во время операций UPDATE или DELETE, так как иногда некоторые пользователи просто забывают написать условие WHERE и запускают запрос на выполнение, и тем самым вносят изменения абсолютно во все записи таблицы, что достаточно часто не является их целью.

Заметка! Установка MySQL 8 на Windows 10.

Как исправить ошибку «Error Code: 1175» в MySQL Workbench

Данную ошибку достаточно легко устранить, так как это всего лишь ограничение, реализованное в целях безопасности.

Давайте рассмотрим способы устранения ошибки «Error Code: 1175» в MySQL Workbench.

Исходные данные

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

   
   CREATE TABLE goods (
       product_id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
       product_name VARCHAR(100) NOT NULL,
       price NUMERIC(18,2) NULL
   );

   INSERT INTO goods (product_name, price)
      VALUES ('Системный блок', 50),
             ('Клавиатура', 30),
             ('Монитор', 100),
             ('Планшет', 150),
             ('Смартфон', 100);

   SELECT * FROM goods;

Скриншот 1

И допустим, у нас появилась задача обновить столбец price у всех записей этой таблицы. Давайте попытаемся это сделать, написав следующий запрос.

   
   UPDATE goods SET price = price + 10;

Скриншот 2

Как видите, у нас возникла ошибка «Error Code: 1175. You are using safe update mode», а данные нам все равно нужно обновить, поэтому давайте исправим эту ситуацию.

Заметка! Что такое SQL. Назначение и основа.

Способ 1 – Отключение режима безопасных обновлений

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

Например, для отключения этого режима на время сеанса можно использовать следующую инструкцию.

   
   SET SQL_SAFE_UPDATES = 0;

Или зайти в настройки MySQL Workbench «Edit -> Preferences -> SQL Editor» и снять галочку «Save Updates», тем самым режим безопасных обновлений будет отключен насовсем (чтобы изменения вступили в силу, необходимо перезапустить MySQL Workbench, т.е. переподключиться к MySQL Server).

Скриншот 3

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

Способ 2 – Использование в условии первичного ключа

Чтобы не трогать сам режим, мы можем просто выполнить требования, которые накладывает данный режим.

Например, в условии WHERE использовать ключ. Для решения нашей задачи мы можем указать product_id > 0.

   
   UPDATE goods SET price = price + 10
   WHERE product_id > 0;

   SELECT * FROM goods;

Скриншот 4

Мы видим, что запрос успешно выполнился, и все записи обновлены.

Заметка! ТОП 5 популярных систем управления базами данных (СУБД).

Способ 3 – Использование оператора LIMIT

Также можно указать оператор LIMIT, чтобы ограничить строки для обновления, при этом в параметре LIMIT указать число, которое будет больше количества строк в таблице.

   
   UPDATE goods SET price = price + 10
   LIMIT 1000;

   SELECT * FROM goods;

Скриншот 5

В данном случае также запрос выполнился успешно.

На сегодня это все, надеюсь, материал был Вам полезен, пока!

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

;-) :| :x :twisted: :smile: :shock: :sad: :roll: :razz: :oops: :o :mrgreen: :lol: :idea: :grin: :evil: :cry: :cool: :arrow: :???: :?: :!:
Нажимая на кнопку «Отправить комментарий», я даю согласие на обработку персональных данных и принимаю политику конфиденциальности.