Код ошибки MySQL: 1175 во время ОБНОВЛЕНИЯ в MySQL Workbench

562

Я пытаюсь обновить столбец visited, чтобы дать ему значение 1. Я использую workbench MySQL, и я пишу инструкцию в редакторе SQL изнутри рабочего места. Я пишу следующую команду:

UPDATE tablename SET columnname=1;

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

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

Я выполнил инструкции, и я отключил опцию safe update в меню Edit, затем Preferences, затем SQL Editor. Такая же ошибка все еще появляется, и я не могу обновить это значение. Пожалуйста, скажите мне, что не так?

  • 3
    Знаете ли вы, что это обновит все строки в вашей таблице, где посещено = 0, чтобы стать посещенным = 1? Это то, что вы хотите?
  • 1
    @ Марк Байерс: Да.
Показать ещё 3 комментария
Теги:
mysql-workbench
sql-update

15 ответов

19
Лучший ответ

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

UPDATE schemaname.tablename SET columnname=1;

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

  • 5
    Вы можете избежать упоминания имени схемы, выбрав схему на левой панели. Выбор схемы на левой панели означает, что вы используете выбранную схему / базу данных
  • 7
    Это не ответ для решения проблемы, описанной в вопросе (и заголовке). Вы должны пометить другого как принятого.
Показать ещё 2 комментария
1178

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

Try:

SET SQL_SAFE_UPDATES = 0;

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

  • 0
    Я упоминал, что уже отключил опцию безопасного обновления в графическом интерфейсе, которая имеет тот же эффект, что и идентификатор, введенный командой. Тем не менее, спасибо за ваш ответ, но я уже ответил на мой вопрос. Проверьте мой ответ, чтобы узнать, в чем была проблема.
  • 8
    После того, как вы измените параметр в графическом интерфейсе, вам необходимо повторно подключиться к базе данных для правильной настройки.
Показать ещё 9 комментариев
362

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

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

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

  • 18
    Для версии 6.3, шаг 2 должен быть "Sql Editor" вместо "Sql Queries" а затем внизу есть флажок "Safe Updates"
  • 1
    если это разовая вещь, я предлагаю вам включить ее снова, так как это очень легко по-королевски испортить ваши данные, если вы не будете осторожны
Показать ещё 3 комментария
111
SET SQL_SAFE_UPDATES=0;
UPDATE tablename SET columnname=1;
SET SQL_SAFE_UPDATES=1;
  • 2
    к сожалению, другие решения, основанные на запросах, у меня не сработали. Но этот сделал! Я ценю, что вы добавили строку, чтобы снова включить безопасные обновления.
  • 1
    Мне действительно нравится этот, потому что он, вероятно, самый общий из всех, но при этом сохраняет безопасность.
93

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

SET SQL_SAFE_UPDATES = 0;

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

  • 7
    Добро пожаловать в SO, обязательно прочитайте страницу тура и страницу помощи , и избегайте публикации ответов, подобных этому, потому что многие ответы ниже этого говорят о том же самом и были опубликованы несколько месяцев назад.
  • 1
    Вы также можете снова включить эту опцию после выполнения запроса.
Показать ещё 1 комментарий
52

Нет необходимости устанавливать 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.

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

  • 1
    Это гений!
  • 0
    оценил ответ: +1
Показать ещё 1 комментарий
42
  • Preferences...
  • "Безопасные обновления"...
  • Перезапустить сервер

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

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

  • 0
    большое спасибо
  • 0
    Это должен был быть принятый ответ. Жаль, что он не был
Показать ещё 3 комментария
34
SET SQL_SAFE_UPDATES=0;

ИЛИ

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

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

Query --> Reconnect to Server

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

30

Код ошибки: 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]
24

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

UPDATE tablename SET columnname=1 where id>0
  • 1
    Эта страница подтверждает этот факт: bennadel.com/blog/…
14

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

В этом случае можно использовать: SET SQL_SAFE_UPDATES=0;
  • 1
    Он существует, но опция находится в разделе «Редактор SQL».
  • 0
    Я не вижу этот вариант. Пожалуйста, вы можете получить скриншот. Спасибо
Показать ещё 3 комментария
9

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

  • 0
    +1 на это решение. Удалить из TABLE, где column = 'xyz' limit 9999999999
  • 0
    Этот ответ должен быть принятым, потому что это наименее небезопасный путь.
4

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

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

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

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

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, то я потерял "чек" в моем запросе. Я мог бы просто отключить опцию навсегда. Я полагаю, что он делает удаление и обновление двухэтапного процесса вместо одного.. но если вы набираете достаточно быстро и перестаете думать о том, что ключ является особенным, а скорее как неприятность..

1

Это для 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;

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

Ещё вопросы

Сообщество Overcoder
Наверх
Меню