Код ошибки 1175

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

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

Содержание

  1. Причины возникновения ошибки «Error Code: 1175» в MySQL Workbench
  2. Как исправить ошибку «Error Code: 1175» в MySQL Workbench
  3. Исходные данные
  4. Способ 1 – Отключение режима безопасных обновлений
  5. Способ 2 – Использование в условии первичного ключа
  6. Способ 3 – Использование оператора LIMIT

Данная ошибка в основном возникает, если Вы хотите обновить или удалить абсолютно все записи из таблицы, при этом вообще не указывая условие 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

Заметка! Начинающим программистам рекомендую почитать мою книгу «SQL код», которая поможет Вам изучить язык SQL как стандарт, в ней рассматриваются все базовые конструкции языка SQL, приводится много примеров и скриншотов.

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

   
   UPDATE goods SET price = price + 10;

Скриншот 2

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

Курс по SQL для начинающих

Заметка! Что такое 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

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

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

As stated in previous posts, changing the default settings of the database server will result in undesired modification of existing data due to an incorrect query on the data in a published project. Therefore, to implement such commands as stated in previous posts, it is necessary to run them in a test environment on sample data and then execute them after testing them correctly.

My suggestion is to write a WHERE conditional statement that will loop through all the rows in all conditions if an update should work for all rows in a table. For example, if the table contains an ID value, the condition ID > 0 can be used to select all rows:

/**
 * For successful result, "id" column must be "Not Null (NN)" and defined in
 * INT data type. In addition, the "id" column in the table must have PK, UQ
 * and AI attributes.
 */
UPDATE schema_name.table_name
SET first_column_name = first_value, second_column_name = second_value, ...
WHERE id > 0;

If the table does not contain an id column, the update operation can be run on all rows by checking a column that cannot be null:

/**
 * "first_column_name" column must be "Not Null (NN)" for successful result.
 */
UPDATE schema_name.table_name
SET first_column_name = first_value, second_column_name = second_value, ...
WHERE table_name.first_column_name IS NOT NULL;

MySQL ERROR code 1175 is triggered when you try to update or delete a table data without using a WHERE clause.

MySQL has a safe update mode to prevent administrators from issuing an UPDATE or DELETE statement without a WHERE clause.

You can see if safe update mode is enabled in your MySQL server by checking the global variable sql_safe_updates.

Check the global variable using the SHOW VARIABLES statement as follows:

SHOW VARIABLES LIKE "sql_safe_updates";

--   +------------------+-------+
--   | Variable_name    | Value |
--   +------------------+-------+
--   | sql_safe_updates | ON    |
--   +------------------+-------+

The example above shows that sql_safe_updates is turned ON, so an UPDATE or DELETE statement without a WHERE clause will cause the error 1175.

Here’s an example UPDATE statement that causes the error:

mysql> UPDATE books SET title = "Stardust";

ERROR 1175 (HY000): You are using safe update mode and you tried 
to update a table without a WHERE that uses a KEY column. 

To fix the error, you can either disable the safe update mode or follow the error description by adding a WHERE clause that uses a KEY column.

You can use the SET statement to disable the safe update as shown below:

SET SQL_SAFE_UPDATES = 0;

Now you should be able to execute an UPDATE or DELETE statement without a WHERE clause.

If you want to turn the safe update mode back on again, you can SET the global variable to 1 as shown below:

SET SQL_SAFE_UPDATES = 1;

If you’re using MySQL Workbench to manage your database server, then you can disable the safe update mode from the Preferences menu.

Click on Edit -> Preferences for Windows or MySQLWorkbench -> Preferences for Mac.

Then click on SQL Editor tab and uncheck the Safe updates feature:

Keep in mind that updating or deleting a table without a WHERE clause will affect all rows in that table.

The safe update mode is added to prevent accidental change that can be fatal.

It’s okay if you’re testing with dummy data, but please be careful with real data 👍

15 ответов

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

UPDATE schemaname.tablename SET columnname=1;

Спасибо всем.

Jury A

Поделиться

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

Try:

SET SQL_SAFE_UPDATES = 0;

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

Habibillah

Поделиться

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

  • Перейдите к EditPreferences
  • Перейдите на вкладку "SQL Editor" и uncheck «Безопасные обновления» check box
  • QueryReconnect to Server//выход из системы, а затем вход в систему
  • Теперь выполните ваш SQL-запрос

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

Ripon Al Wasim

Поделиться

SET SQL_SAFE_UPDATES=0;
UPDATE tablename SET columnname=1;
SET SQL_SAFE_UPDATES=1;

user2531028

Поделиться

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

SET SQL_SAFE_UPDATES = 0;

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

Quagmire12

Поделиться

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

UPDATE customers SET countryCode = 'USA'
    WHERE country = 'USA';               -- which gives the error, you just write:

UPDATE customers SET countryCode = 'USA'
    WHERE (country = 'USA' AND customerNumber <> 0); -- Because customerNumber is a primary key you got no error 1175 any more.

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

Rudy De Volder

Поделиться

  • Preferences…
  • «Безопасные обновления»…
  • Перезапустить сервер

Изображение 815

Изображение 816
Изображение 817

andrew

Поделиться

SET SQL_SAFE_UPDATES=0;

ИЛИ

Перейти к Edit --> Preferences

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

Query --> Reconnect to Server

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

Balu

Поделиться

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

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

SET SQL_SAFE_UPDATES = 0;
UPDATE options SET title= 'kiemvieclam24h' WHERE url = 'http://kiemvieclam24h.net';
SET SQL_SAFE_UPDATES = 1;

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

Mysql workbench 8.0:

MySQL Workbench => [ Edit ] => [ Preferences ] -> [ SQL Editor ] -> Uncheck "Safe Updates"

Изображение 818 Старая версия может:

MySQL Workbench => [Edit] => [Preferences] => [SQL Queries]

TinhNQ

Поделиться

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

UPDATE tablename SET columnname=1 where id>0

Tomislav

Поделиться

В MySQL Workbech версии 6.2 не выходит из настроек SQLQueries.

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

ferdiado

Поделиться

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

Ruwantha

Поделиться

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

update tablename  set column1 = '' where tablename .id = (select id from tablename2 where tablename2.column2 = 'xyz');

Sonic-Mayhem

Поделиться

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

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

create temporary table ids ( id int )
    select id from prime_table where condition = true;
update prime_table set field1 = '' where id in (select id from ids);

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

update prime_table set field 1 = '' where id <> 0 and id in (select id from ids);

Это сработало. Ну, golly — если я всегда добавляю, где ключ < > 0, чтобы обойти безопасную проверку обновлений или даже установить SQL_SAFE_UPDATE = 0, то я потерял «чек» в моем запросе. Я мог бы просто отключить опцию навсегда. Я полагаю, что он делает удаление и обновление двухэтапного процесса вместо одного.. но если вы набираете достаточно быстро и перестаете думать о том, что ключ является особенным, а скорее как неприятность..

Gerard ONeill

Поделиться

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

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

Изображение 819

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

Изображение 820

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

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

Изображение 821

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

Использование опции --safe-updates

Для новичков полезным вариантом запуска является --safe-updates (или --i-am-a-dummy, который имеет тот же эффект). Это полезно для случаев, когда вы, возможно, выпустили инструкцию DELETE FROM tbl_name но забыли WHERE. Обычно такой оператор удаляет все строки из таблицы. С помощью --safe-updates вы можете удалять строки только путем указания значений ключей, которые их идентифицируют. Это помогает предотвратить несчастные случаи.

Когда вы используете параметр --safe-updates, mysql выдает следующую инструкцию при подключении к серверу MySQL:

SET sql_safe_updates=1, sql_select_limit=1000, sql_max_join_size=1000000;

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

Krishnadas PC

Поделиться

Ещё вопросы

  • 1Линия между двумя перетаскиваемыми точками на холсте matplotlib pyqt5
  • 1Как заполнить данные в JComboBox?
  • 1pandas read_csv устанавливает `dtype` по индексу столбца (не по имени)
  • 1Springdata: mongodb находит запрос с необязательными «критериями»
  • 0Автоматическая проблема с перенаправлением в iframe
  • 1Protobuf-net тратит слишком много времени в RuntimeTypeModel.TakeLock
  • 1.split () работает странно на некоторых строках
  • 0Как анимировать, когда нажмите класс или идентификатор с помощью CSS3?
  • 1javascript — отступ и положение фигурных скобок [дубликаты]
  • 0Как я могу хранить отдельное изображение в отдельном поле с одним кодом PHP
  • 1Получение формата «java.io.IOException: Invalid keystore» после преобразования потока файлов .jks в строку в кодировке utf-8 и обратно в поток
  • 0Неожиданное поведение PHP-функции rename (), используемой в моем коде для переименования файлов
  • 1Сбой Android Lint для скриптов Gradle на основе Kotlin
  • 1Передача аргументов в setTimeout: один метод не работает (JS)
  • 0mysqldump иногда возвращает пустой файл
  • 1Использование foreach с движком представления ASP.NET внутри ASP: Repeater не работает
  • 0Угловой JS передает массив строк в директиву
  • 1Ошибка проверки XML-схемы «Содержимое элемента flowPara не завершено»
  • 0Как вычесть количество моих продуктов, перечисленных в списке, непосредственно в мою базу данных продуктов? (Баз данных)
  • 1Схема <[объект объекта]> уже существует с другим определением
  • 1В проекте «приложение» разрешенная зависимость библиотеки сервисов Google Play зависит от другого
  • 0Проверка уникального ключа, показывающая ошибку при обновлении данных в laravel
  • 1Как добавить дополнительный исходный каталог для maven для использования только при выполнении тестов или при отладке?
  • 0HTML-код внутри php
  • 0Код CodeIgniter работает в браузере, умирает в тесте phpunit: вызов неопределенного метода CI_DB_mysql_driver :: where () в (… privacy ..) users.php в строке 36
  • 0Примечание: неопределенный индекс: категория
  • 1Libgdx BitmapFont плохая частота кадров
  • 0jQuery blueimp fileup загрузить Firefox / Opera расчетов проблема, хром в порядке
  • 1Как обновить маркер, используя местоположение в реальном времени вдоль полилинии?
  • 1Как мне получить доступ к enum по int или по строке
  • 0Не удается подключиться к MySQL с помощью Spring в Docker
  • 1Как привязать JLabel к JSlider с помощью деления?
  • 1Как я могу найти координаты различных значений?
  • 0Изменение пункта, нажав на список
  • 0как уменьшить строки JavaScript вместо повторения
  • 0JQuery не получить идентификатор строки
  • 1Панды: Как получить количество строк по значению определенного значения столбца и добавить счет в качестве другого столбца.
  • 1Совместимость приложения Android TV для Google Play (Xiaomi MiBox)
  • 1Не удается найти символ
  • 1Ошибка: не могу ждать без волокна
  • 0Создать стену для поста из блоков
  • 1Страница входа с использованием Mvvmcross
  • 1LiveData не обновляется при изменении данных
  • 1Python / Flask-WTF — Как я могу рандомизировать выбор из динамического RadioField?
  • 0Проблема с пробелами в HTML — все браузеры
  • 0как я могу отобразить содержимое этой вкладки на основе события
  • 0Как написать этот запрос MySQL? [Дубликат]
  • 1чтение файла WAV в Java
  • 0выберите для обновления дважды к той же таблице ключом diffrenet, вызывающим взаимоблокировку в MySQL
  • 0Как использовать PHP монолог

If you try to update a row in the MySQL database by using Workbench without specifying Key column in the WHERE clause you will get the following error:

Error Code: 1175. You are using safe update mode and you tried to update a table without a WHERE that uses a KEY column. To disable safe mode, toggle the option in Preferences -> SQL Editor and reconnect.

Error Code 1175 is telling you that you are in the safe mode, this is mode is enabled by default in MySQL Workbench, and it helps you prevent some unintentional updates to the database. This is a client-side setting (the same as --safe-updates in the mysql client) so there’s not much you can do to disable it on the server-side.

There are few ways you can fix this, but I would not recommend you disabling it permanently, it’s better to disable it, execute your update statement and then enable this setting again.

ErrorCode 1175 Safe Update Mode Fix

How to fix Error Code 1175

The simple fix is to disable this setting with an SQL statement, then execute the UPDATE statement and then enable it again:

-- disable safe update mode
SET SQL_SAFE_UPDATES=0;
-- execute update statement
UPDATE table SET column='value';
-- enable safe update mode
SET SQL_SAFE_UPDATES=1;

There is another way to disable this mode permanently in MySQL Workbench (I do not recommend you disable this mode entirely, it’s better to use the previous approach to the temporary disable the safe update mode)

Disable Safe Update Mode

To permanently disable safe update mode in MySQL Workbench 8.0 you should do the following:

  1. Go to Edit —> PreferencesMySQL Workbench Edit Preferences Menu
  2. Click "SQL Editor" tab and uncheck «Safe Updates» (rejects UPDATEs and DELETEs with no restrictions) check boxMySQL Workbench SQL Editor Safe Update
  3. Query —> Reconnect to Server

In this way, you will permanently disable the Safe Update mode, so all of your updates and deletes can be executed without specifying WHERE clause at all. Be careful, you can delete all data from the table in this case.

P.S. this is just a reminder for myself on how to disable this setting, I am tired of googling it every time I need to update something directly in the database (I would not recommend doing it either, but sometimes you have to).

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

Интересное по теме:

  • Код ошибки 1171
  • Код ошибки 116 при оплате картой
  • Код ошибки 1170
  • Код ошибки 116 на терминале
  • Код ошибки 1170000 как исправить

  • 0 0 голоса
    Рейтинг статьи
    Подписаться
    Уведомить о
    guest

    0 комментариев
    Старые
    Новые Популярные
    Межтекстовые Отзывы
    Посмотреть все комментарии