Ответ 1
Я нашел ответ. Проблема заключалась в том, что я должен предшествовать имени таблицы с именем схемы. то есть команда должна быть:
UPDATE schemaname.tablename SET columnname=1;
Спасибо всем.
Я пытаюсь обновить столбец visited
, чтобы дать ему значение 1. Я использую workbench MySQL, и я пишу инструкцию в редакторе SQL изнутри рабочего места. Я пишу следующую команду:
UPDATE tablename SET columnname=1;
Это дает мне следующую ошибку:
Вы используете безопасный режим обновления, и вы пытались обновить таблицу без WHERE, который использует столбец KEY. Чтобы отключить безопасный режим, переключите параметр....
Я выполнил инструкции, и я отключил опцию safe update
в меню Edit
, затем Preferences
, затем SQL Editor
. Такая же ошибка все еще появляется, и я не могу обновить это значение. Пожалуйста, скажите мне, что не так?
Я нашел ответ. Проблема заключалась в том, что я должен предшествовать имени таблицы с именем схемы. то есть команда должна быть:
UPDATE schemaname.tablename SET columnname=1;
Спасибо всем.
Похоже, ваш сеанс MySql имеет параметр safe-updates. Это означает, что вы не можете обновлять или удалять записи без указания ключа (например, primary key
) в предложении where.
Try:
SET SQL_SAFE_UPDATES = 0;
Или вы можете изменить свой запрос, чтобы следовать правилу (используйте primary key
в where clause
).
Перед выполнением команды UPDATE выполните следующие действия: В Workbench MySQL
Edit
→ Preferences
"SQL Editor"
и uncheck
"Безопасные обновления" check box
Query
→ Reconnect to Server
//выход из системы, а затем вход в системустр., нет необходимости перезапускать демон MySQL!
SET SQL_SAFE_UPDATES=0;
UPDATE tablename SET columnname=1;
SET SQL_SAFE_UPDATES=1;
Все, что необходимо: Запустите новый запрос и запустите:
SET SQL_SAFE_UPDATES = 0;
Затем: Запустите запрос, который вы пытались запустить, который ранее не работал.
Нет необходимости устанавливать 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.
Теперь вы можете быть уверены, что каждая запись (ВСЕГДА) обновляется, как вы ожидаете.
Код ошибки: 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"
MySQL Workbench => [Edit] => [Preferences] => [SQL Queries]
SET SQL_SAFE_UPDATES=0;
ИЛИ
Перейти к Edit --> Preferences
Установите флажок SQL Queries
и снимите флажок Safe Updates
Query --> Reconnect to Server
Теперь выполните свой SQL-запрос
Если вы находитесь в безопасном режиме, вам нужно указать id в разделе where. Так что-то вроде этого должно работать!
UPDATE tablename SET columnname=1 where id>0
В MySQL Workbech версии 6.2 не выходит из настроек SQLQueries
.
SET SQL_SAFE_UPDATES=0;
В WorkBench я решил ее, отключив безопасный режим обновления:
-Edit → Настройки → Sql Editor, затем снимите флажок Безопасное обновление.
SET SQL_SAFE_UPDATES = 0;
ваш код SQL здесь
SET SQL_SAFE_UPDATES = 1;
Простейшим решением является определение предела строки и выполнения. Это делается в целях безопасности.
Поскольку вопрос был дан ответ и не имел никакого отношения к безопасным обновлениям, это может быть неправильное место; Я отправлю только для добавления информации.
Я старался быть хорошим гражданином и модифицировал запрос, чтобы использовать временную таблицу идентификаторов, которые будут обновляться:
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, то я потерял "чек" в моем запросе. Я мог бы просто отключить опцию навсегда. Я полагаю, что он делает удаление и обновление двухэтапного процесса вместо одного.. но если вы набираете достаточно быстро и перестаете думать о том, что ключ является особенным, а скорее как неприятность..
Правда, это бессмысленно для большинства примеров. Но, наконец, я пришел к следующему утверждению, и он отлично работает:
update tablename set column1 = '' where tablename .id = (select id from tablename2 where tablename2.column2 = 'xyz');
Это для Mac, но должно быть одинаковым для других ОС, кроме местоположения настроек.
Ошибка, возникающая при попытке выполнить небезопасную операцию DELETE
В новом окне снимите флажок " Safe updates
Затем закройте и снова откройте соединение. Не нужно перезапускать службу.
Теперь мы снова попробуем DELETE
с успешными результатами.
Так что же это за безопасные обновления? Это не зло. Об этом говорит 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;
Безопасно включать эту опцию при работе с производственной базой данных. В противном случае вы должны быть очень осторожны, не случайно удаляя важные данные.