Приветствую Вас на сайте Info-Comp.ru! Сегодня мы рассмотрим ситуацию, когда в среде MySQL Workbench при выполнении запроса на обновление (UPDATE) или удаление (DELETE) возникает ошибка «Error Code: 1175. You are using safe update mode». Мы поговорим о причинах возникновения этой ошибки, а также о том, как устранить эту ошибку.
Причины возникновения ошибки «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;
Заметка! Начинающим программистам рекомендую почитать мою книгу «SQL код», которая поможет Вам изучить язык SQL как стандарт, в ней рассматриваются все базовые конструкции языка SQL, приводится много примеров и скриншотов.
И допустим, у нас появилась задача обновить столбец price у всех записей этой таблицы. Давайте попытаемся это сделать, написав следующий запрос.
UPDATE goods SET price = price + 10;
Как видите, у нас возникла ошибка «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).
Однако, так как по умолчанию данный режим все-таки включен, значит, это рекомендуют сами разработчики MySQL, и отключать его не советуют. Поэтому стоит посмотреть на следующие способы решения данной проблемы.
Способ 2 – Использование в условии первичного ключа
Чтобы не трогать сам режим, мы можем просто выполнить требования, которые накладывает данный режим.
Например, в условии WHERE использовать ключ. Для решения нашей задачи мы можем указать product_id > 0.
UPDATE goods SET price = price + 10 WHERE product_id > 0; SELECT * FROM goods;
Мы видим, что запрос успешно выполнился, и все записи обновлены.
Заметка! ТОП 5 популярных систем управления базами данных (СУБД).
Способ 3 – Использование оператора LIMIT
Также можно указать оператор LIMIT, чтобы ограничить строки для обновления, при этом в параметре LIMIT указать число, которое будет больше количества строк в таблице.
UPDATE goods SET price = price + 10 LIMIT 1000; SELECT * FROM goods;
В данном случае также запрос выполнился успешно.
На сегодня это все, надеюсь, материал был Вам полезен, пока!
Спасибо, мне помогло)