Код помилки MySQL: 1175 під час оновлення в MySQL Workbench


816

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

UPDATE tablename SET columnname=1;

Це дає мені таку помилку:

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

Я дотримувався вказівок, і тоді я знімав safe updateопцію з Editменю Preferencesпотім SQL Editor. Ця ж помилка все ще з’являється, і я не в змозі оновити це значення. Скажіть, будь ласка, що не так?


4
Чи знаєте ви, що це оновить усі рядки таблиці, де відвідано = 0, щоб стати відвідуваним = 1? Це те, чого ти хочеш?
Марк Байєрс

23
Знявши прапорець "Безпечні оновлення", виконайте наступний крок: Запит -> Повторно підключитися до сервера. Тепер виконайте свій запит
Ripon Al Wasim

5
Ви повинні знову підключитися до MySQL Server (перезапустити з'єднання MySQL), перш ніж ця зміна вплине.
Філіп Олсон

Відповіді:


1611

Схоже, на вашому сеансі MySql встановлено параметр безпечних оновлень . Це означає, що ви не можете оновити або видалити записи, не вказавши ключ (наприклад primary key) у пункті де.

Спробуйте:

SET SQL_SAFE_UPDATES = 0;

Або ви можете змінити запит, щоб дотримуватися правила (використання primary keyв where clause).


Я згадав, що вже відключив опцію безпечного оновлення з графічного інтерфейсу, яка має той самий ефект, що і id, я набрав команду. Однак, дякую за вашу відповідь, але я вже відповів на моє запитання. Перевірте мою відповідь, щоб знати, в чому проблема.
Журі А

8
Після зміни параметра в графічному інтерфейсі вам потрібно знову підключитися до бази даних, щоб правильно встановити налаштування.
Тім Косьєльський

31
Не забудьте повернути це, SET SQL_SAFE_UPDATES = 1коли ви закінчите, оскільки це важлива функція безпеки.
StockB

4
Я не погоджуюся з StockB ... Можливо, ви хочете продовжувати його працювати, поки ви краще використовуєте SQL ... але як тільки ви дізнаєтеся, що ви робите ..., ця річ абсолютно марна. Ви ні в якому разі не повинні розробляти свої речі на виробничому сервері, тож навіть якщо ви заплутаєтесь, єдине, що вам слід зламати, - це ваш сервер розробок.
Матьє Туркот

3
Я тільки сказав, що я шукав цю посаду, як 20 разів за останні 6 місяців, оскільки я завжди мав цю опцію неправдивою протягом 11 років, але зараз я працюю над компанією з цим набором, що відповідає дійсності на розробку та виробництво. Існує багато причин встановити його за замовчуванням на 0, наприклад, коли ви розробляєте автономні функції, які, можливо, ви хочете експортувати до CSV, а потім позначити його як експортований або щось подібне. Інший раз це дратує через глобальні оновлення, в яких, очевидно, немає жодного фільтра ПК. Я бачу це скоріше як noob-захист, ніж реальна корисна функція.
JoelBonetR

454

Перед виконанням команди UPDATE виконайте наступні кроки: На MySQL Workbench

  1. Перейдіть до Edit->Preferences
  2. Клацніть "SQL Editor"вкладку та uncheck"Безпечні оновлення"check box
  3. Query-> Reconnect to Server // вихід, а потім увійти
  4. Тепер виконайте свій SQL-запит

ps, Не потрібно перезапускати демон MySQL!


20
Для версії 6.3 крок 2 має бути "Sql Editor"замість, "Sql Queries"а тоді внизу є прапорець для"Safe Updates"
meconroy

1
якщо це разова річ, я пропоную вам увімкнути її назад, тому що це дуже легко по-царському виправити свої дані, якщо ви не будете обережні
Frankenmint

2
спасибі конрой. Якийсь час я не міг побачити цю скриньку. Мені просто довелося збільшити вікно.
arn-arn

Можливо, вони перемістили його, але в MySQL Workbench 6.0 це під "SQL Queries", а не "SQL Editor"
MPelletier

1
так-же тут, довелося трохи прокрутити вниз, щоб побачити це.
Елон Зіто

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

4
на жаль, інші рішення на основі запитів не працювали для мене. Але це зробив! Дякую, що ви додали рядок, щоб увімкнути безпечні оновлення.
SherylHohman

1
Мені дуже подобається цей, оскільки він, мабуть, найзагальніший із усіх, хоча все ще тримається в безпеці.
Nae

117

Не потрібно встановлювати SQL_SAFE_UPDATES на 0 , я б дуже заперечував це робити так. SAFE_UPDATES за замовчуванням для REASON. Ви можете керувати автомобілем без ременів безпеки та інших речей, якщо ви знаєте, що я маю на увазі;) Просто додайте в пункті 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.

Тепер ви можете бути впевнені, що кожен запис (ЗАВЖДИ) оновлюється, як ви очікували.


3
Це геній!
Амос Лонг

вдячна відповідь: +1
Асиф Раза

2
Ха-ха, це хороший трюк. Я використовував WHERE id > 0як трюк у цьому напрямку.
Csaba Toth

Це не працює для мене, він продовжує показувати мені те саме повідомлення. Я вирішив це, відключивши безпечний режим оновлення за допомогою: -Edit -> Preferences -> Sql Editor та зніміть прапорець Safe update.
Абдельхаді

2
Наскільки це насправді робить це більш безпечним?
Метт Мессерсміт

106

Все, що потрібно: Почніть новий запит і запустіть:

SET SQL_SAFE_UPDATES = 0;

Потім: запустіть запит, який ви намагалися запустити, який раніше не працював.


7
Ласкаво просимо до SO, не забудьте прочитати сторінку екскурсії та довідкову сторінку та уникайте публікацій відповідей на кшталт цієї, оскільки багато відповідей нижче цієї кажуть саме те саме і були опубліковані місяці тому
WOUNDEDStevenJones

1
Ви також можете знову включити цю опцію після запуску запиту.
kta

Що додає ця відповідь? Ти щойно написав те саме, що і Хабібілла, більш ніж через два роки. Намагаєтесь пожинати карму?
Люк


66

Код помилки: 1175. Ви використовуєте безпечний режим оновлення, і ви намагалися оновити таблицю без WHERE, що використовує стовпець KEY. Щоб вимкнути безпечний режим, перемкніть цю опцію в розділі Налаштування -> SQL Editor та підключіться знову.

Вимкніть "Безпечний режим оновлення" тимчасово

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

Вимкніть "Безпечний режим оновлення" назавжди

Mysql верстат 8.0:

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

введіть тут опис зображення Стара версія може:

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

41
  1. Налаштування ...
  2. "Безпечні оновлення" ...
  3. Перезавантажте сервер

Налаштування ...

Безпечні оновлення Перезавантажте сервер


Це повинно було прийняти відповідь. Шкода, що цього не було
ErrorrrDetector

1
Вам не доведеться перезавантажувати сервер. Це повинно бути достатньо, щоб просто закрити і відновити з'єднання.
Марк Л.

1
У MAC налаштування знаходяться у верхньому меню MySQLWorkbench.
zwitterion

36
SET SQL_SAFE_UPDATES=0;

АБО

Йти до Edit --> Preferences

Клацніть на SQL Queries вкладці та зніміть Safe Updates прапорець

Query --> Reconnect to Server

Тепер виконуйте запит sql


26

Якщо ви перебуваєте в безпечному режимі, вам потрібно вказати ідентифікатор, де пункт. Тож щось подібне повинно працювати!

UPDATE tablename SET columnname=1 where id>0

1
Ця сторінка підтверджує цей факт: bennadel.com/blog/…
DivDiff

20

На WorkBench я вирішив це, відключивши безпечний режим оновлення:

-Редагуйте -> Налаштування -> Редактор Sql та зніміть прапорець Безпечне оновлення.


7
Це працює, але мені довелося перезапустити MySQL Workbench.
Ланіл Марасінгхе

17

Я знайшов відповідь. Проблема полягала в тому, що я повинен передувати імені таблиці з назвою схеми. тобто команда повинна бути:

UPDATE schemaname.tablename SET columnname=1;

Дякую всім.


5
Ви можете уникнути згадування імені схеми, вибравши схему на лівій панелі. Вибір схеми на лівій панелі означає, що ви використовуєте вибрану схему / базу даних
Ripon Al Wasim

10
Це не відповідь на вирішення питання, описаного в питанні (та заголовку). Ви повинні позначити іншого як прийнятого.
T30

Я намагався зі схемою, але отримую ту ж помилку, оновіть qms-active-db.gh_table set bookmark = '1660_207100000001000'
Code_Mode

3
Це не відповідь!
Єзекіїль Віктор

1
неправильна відповідь, правильна відповідь відповідає Хабібілла (внизу)
hariharan s

14

У версії 6.2 MySQL Workbech 6.2 не виходить із параметрів SQLQueriesналаштування.

У цьому випадку можливе використання: SET SQL_SAFE_UPDATES=0;


1
Він існує, але зараз опція знаходиться в розділі "Редактор SQL".
Філіп Олсон

Я не бачу цього варіанту. Будь ласка, ви можете отримати скріншот. Спасибі
фердіадо

Відкрийте Налаштування -> вкладка Редактор SQL -> Внизу. У версії 6.2-бета-версії відсутня ця опція, тому, можливо, вам потрібно буде оновити до 6.2.3+.
Філіп Олсон

моя версія 6.3, це під -> Редактор SQL -> Інше
tyan

12

Найпростішим рішенням є визначення межі рядка та виконання. Це робиться з метою безпеки.


2
+1 для цього рішення. Видалити з TABLE, де стовпець = 'xyz' межа 9999999999
FlyingZebra1

2
Ця відповідь має бути прийнятою відповіддю, оскільки це найменш небезпечний спосіб.
Джуліан

7

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

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

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);

Невдача. Змінив оновлення на:

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

Це спрацювало. Добре боже - якщо я завжди додаю, де клавіша <> 0, щоб обійти безпечну перевірку оновлення, або навіть встановити SQL_SAFE_UPDATE = 0, то я втратив "чек" у своєму запиті. Я б також міг просто відключити варіант назавжди. Я припускаю, що це робить видалення та оновлення двоступеневого процесу замість одного .. але якщо ви наберете досить швидко і перестанете думати про те, що ключ є особливим, а не просто неприємністю ..


4

Правда, для більшості прикладів це безглуздо. Але, нарешті, я прийшов до наступного твердження, і воно прекрасно працює:

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

3

Це для 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;

Безпечно ввімкнути цю опцію, поки ви маєте справу з виробничою базою даних. В іншому випадку ви повинні бути дуже обережними, щоб випадково не видалити важливі дані.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.