Codice di errore MySQL: 1175 durante UPDATE in MySQL Workbench


817

Sto cercando di aggiornare la colonna visitedper dargli il valore 1. Uso MySQL workbench e scrivo la dichiarazione nell'editor SQL dall'interno del workbench. Sto scrivendo il seguente comando:

UPDATE tablename SET columnname=1;

Mi dà il seguente errore:

Stai utilizzando la modalità di aggiornamento sicuro e hai provato ad aggiornare una tabella senza un WHERE che utilizza una colonna KEY Per disabilitare la modalità sicura, attiva l'opzione ....

Ho seguito le istruzioni e ho deselezionato l' safe updateopzione dal Editmenu, Preferencesquindi SQL Editor. Lo stesso errore appare ancora e non riesco ad aggiornare questo valore. Per favore, dimmi cosa c'è che non va?


4
Sei a conoscenza del fatto che questo aggiornerà tutte le righe della tabella in cui visitata = 0 per diventare visitata = 1? È questo che vuoi?
Mark Byers,

23
Dopo aver deselezionato "Aggiornamenti sicuri", procedere come segue: Query -> Riconnetti al server. Ora esegui la tua query
Ripon Al Wasim il

5
È necessario riconnettersi a MySQL Server (riavviare la connessione MySQL) prima che questa modifica abbia effetto.
Philip Olson,

Risposte:


1613

Sembra che la tua sessione MySql abbia l' opzione di aggiornamento sicuro impostata. Ciò significa che non è possibile aggiornare o eliminare i record senza specificare una chiave (es. primary key) Nella clausola where.

Provare:

SET SQL_SAFE_UPDATES = 0;

In alternativa, è possibile modificare la query per seguire la regola (utilizzare primary keyin where clause).


Ho detto che ho già disabilitato l'opzione di aggiornamento sicuro dalla GUI che ha lo stesso effetto dell'ID che ho digitato il comando. Tuttavia, grazie per la risposta, ma ho già risposto alla mia domanda. Controlla la mia risposta per sapere qual è stato il problema.
Giuria

8
Dopo aver modificato l'opzione nella GUI, è necessario riconnettersi al database per impostare correttamente le impostazioni.
Tim Koscielski,

31
Assicurati di ripristinarlo con SET SQL_SAFE_UPDATES = 1quando hai finito, poiché è una funzione di sicurezza utile.
StockB,

4
Non sono d'accordo con StockB ... Potresti voler continuare mentre usi meglio SQL ... ma una volta che sai cosa stai facendo ... quella cosa è completamente inutile. Non dovresti comunque sviluppare le tue cose su un server di produzione, quindi anche se sbagli, l'unica cosa che dovresti rompere è il tuo server di sviluppo ... che nessuno se ne frega comunque.
Mathieu Turcotte,

3
sono venuto solo per dire che ho cercato questo post come 20 volte negli ultimi 6 mesi dato che ho sempre avuto questa opzione su false per 11 anni, ma ora sto lavorando a un'azienda con questo set su true per lo sviluppo e la produzione. Esistono molti motivi per impostarlo su 0 per impostazione predefinita, ad esempio quando si sviluppano funzionalità autonome che è possibile esportare direttamente in CSV e quindi contrassegnarlo come esportato o qualcosa di simile. Altre volte è fastidioso a causa di aggiornamenti globali che ovviamente non hanno alcun filtro pk. Lo vedo più come una protezione noob che una vera funzione utile.
JoelBonetR,

455

Seguire i seguenti passaggi prima di eseguire il comando UPDATE: In MySQL Workbench

  1. Vai a Edit->Preferences
  2. Fare clic sulla "SQL Editor"scheda e uncheck"Aggiornamenti sicuri"check box
  3. Query-> Reconnect to Server // disconnetti e quindi accedi
  4. Ora esegui la tua query SQL

ps, non è necessario riavviare il demone MySQL!


20
Per la versione 6.3 il passaggio 2 dovrebbe essere "Sql Editor"invece di "Sql Queries"e quindi c'è una casella di controllo in basso per"Safe Updates"
meconroy

1
se è una volta una cosa che ti consiglio di riattivare in quanto ciò rende molto semplice archiviare in modo regale i tuoi dati se non stai attento
Frankenmint,

2
grazie conroy. Per un po 'non ho potuto vedere quella scatola. Ho dovuto solo ingrandire la finestra.
arn-arn,

Forse l'hanno spostato, ma in MySQL Workbench 6.0 è sotto "Query SQL", non "SQL Editor"
MPelletier,

1
sì, lo stesso qui, ho dovuto scorrere un po 'verso il basso per vederlo.
Elon Zito,

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

4
purtroppo le altre soluzioni basate su query non hanno funzionato per me. Ma questo ha fatto! Apprezzo che tu abbia aggiunto una riga per riattivare gli aggiornamenti sicuri.
SherylHohman,

1
Mi piace molto questo perché è probabilmente il più generale di tutti, pur mantenendo la sicurezza.
Nae,

117

Non è necessario impostare SQL_SAFE_UPDATES su 0 , lo scoraggerei davvero a farlo in quel modo. SAFE_UPDATES è attivato per impostazione predefinita per un REASON. Puoi guidare un'auto senza cinture di sicurezza e altre cose se sai cosa intendo;) Basta aggiungere nella clausola WHERE un valore KEY che corrisponda a tutto come una chiave primaria rispetto a 0, quindi invece di scrivere:

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.

Ora puoi essere certo che ogni record viene (SEMPRE) aggiornato come previsto.


3
Questo è geniale!
Amos Long,

apprezzata risposta: +1
Asif Raza,

2
Haha, è un buon trucco. Ho usato WHERE id > 0come un trucco in questo senso.
Csaba Toth,

Non funziona per me, continua a mostrarmi lo stesso messaggio. L'ho risolto disattivando la modalità di aggiornamento sicuro tramite: -Modifica -> Preferenze -> Editor SQL quindi deseleziona Aggiornamento sicuro.
Abdelhadi Lahlou,

2
Ma come può renderlo effettivamente più sicuro?
Matt Messersmith,

107

Tutto ciò che serve è: avviare una nuova query ed eseguire:

SET SQL_SAFE_UPDATES = 0;

Quindi: esegui la query che stavi cercando di eseguire e che in precedenza non funzionava.


7
Benvenuto su SO, assicurati di leggere la pagina del tour e la pagina di aiuto ed evita di pubblicare risposte come questa perché molte risposte sotto questa dicono la stessa identica cosa e sono state pubblicate mesi fa
WOUNDEDStevenJones

1
È inoltre possibile abilitare nuovamente questa opzione dopo aver eseguito la query.
kta,

Cosa aggiunge questa risposta? Hai appena pubblicato la stessa cosa di Habibillah, più di due anni dopo. Cerchi di raccogliere karma?
Luc


66

Codice errore: 1175. Stai utilizzando la modalità di aggiornamento sicuro e hai provato ad aggiornare una tabella senza un WHERE che utilizza una colonna KEY Per disabilitare la modalità sicura, attiva l'opzione in Preferenze -> Editor SQL e riconnetti.

Disattiva temporaneamente la "Modalità di aggiornamento sicuro"

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

Disattiva "Modalità aggiornamento sicuro" per sempre

Mysql workbench 8.0:

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

inserisci qui la descrizione dell'immagine La vecchia versione può:

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

41
  1. Preferenze ...
  2. "Aggiornamenti sicuri" ...
  3. Riavvia il server

Preferenze ...

Aggiornamenti sicuri Riavvia il server


Questa avrebbe dovuto essere la risposta accettata. È un peccato che non sia stato
ErrorrrDectorector

1
Non dovresti dover riavviare il server. Dovrebbe essere sufficiente semplicemente chiudere e riaprire la connessione.
Marc L.

1
In MAC, le preferenze sono nel menu principale di MySQLWorkbench.
zwitterion

36
SET SQL_SAFE_UPDATES=0;

O

Vai a Edit --> Preferences

Fare clic sulla SQL Queries scheda e deselezionare la Safe Updates casella di controllo

Query --> Reconnect to Server

Ora esegui la tua query sql


26

Se si è in modalità provvisoria, è necessario fornire id nella clausola where. Quindi qualcosa del genere dovrebbe funzionare!

UPDATE tablename SET columnname=1 where id>0

1
Questa pagina conferma questo fatto: bennadel.com/blog/…
DivDiff il

20

Su WorkBench l'ho risolto disattivando la modalità di aggiornamento sicuro:

-Modifica -> Preferenze -> Editor SQL quindi deseleziona Aggiornamento sicuro.


7
Funziona ma, ho dovuto riavviare MySQL Workbench.
Lanil Marasinghe,

17

Ho trovato la risposta Il problema era che dovevo precedere il nome della tabella con il nome dello schema. cioè, il comando dovrebbe essere:

UPDATE schemaname.tablename SET columnname=1;

Ringrazia tutti.


5
Puoi evitare di menzionare il nome dello schema selezionando lo schema nel pannello di sinistra. Selezionando lo schema nel pannello di sinistra significa che stai usando lo schema / database selezionato
Ripon Al Wasim

10
Questa non è la risposta per risolvere il problema descritto nella domanda (e nel titolo). Dovresti contrassegnarne un altro come accettato.
T30,

Ho provato con schemaname ma ottenendo lo stesso errore, aggiorna qms-active-db.gh_table set bookmark = '1660_207100000001000'
Code_Mode

3
Questa non è la risposta!
Ezechiele Victor,

1
risposta errata, risposta corretta viene data da Habibillah (sotto)
hariharan s

14

In MySQL Workbech versione 6.2 non esce dalla preferenzaSQLQueries opzioni di .

In questo caso è possibile utilizzare: SET SQL_SAFE_UPDATES=0;


1
Esiste, ma l'opzione è ora in "SQL Editor".
Philip Olson,

Non vedo questa opzione. Per favore, puoi avere uno screenshot. Grazie
ferdiado,

Apri Preferenze -> scheda Editor SQL -> In fondo. Una versione 6.2-beta mancava di questa opzione, quindi forse dovrai aggiornare alla 6.2.3+.
Philip Olson,

la mia versione è 6.3, è sotto -> SQL Editor -> Altro
tyan

12

La soluzione più semplice è definire il limite di riga ed eseguire. Questo viene fatto per motivi di sicurezza.


2
+1 su questa soluzione. Elimina da TABELLA dove colonna = limite 'xyz'
9999999999

2
Questa risposta dovrebbe essere la risposta accettata perché è il modo meno pericoloso.
Julian,

7

Poiché alla domanda è stata data risposta e non ha nulla a che fare con gli aggiornamenti sicuri, questo potrebbe essere il posto sbagliato; Pubblicherò solo per aggiungere informazioni.

Ho cercato di essere un buon cittadino e ho modificato la query per utilizzare una tabella temporanea di ID che sarebbe stata aggiornata:

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

Fallimento. Modificato l'aggiornamento per:

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

Ha funzionato Bene azzeccato - se aggiungo sempre dove chiave <> 0 per aggirare il controllo di aggiornamento sicuro, o anche impostare SQL_SAFE_UPDATE = 0, allora ho perso il 'controllo' sulla mia query. Potrei anche semplicemente disattivare l'opzione in modo permanente. Suppongo che elimini e aggiorni un processo in due passaggi anziché uno .. ma se digiti abbastanza velocemente e smetti di pensare che la chiave sia speciale ma piuttosto solo un fastidio ..


4

È vero, questo è inutile per la maggior parte degli esempi. Ma alla fine, sono arrivato alla seguente dichiarazione e funziona benissimo:

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

3

Questo è per Mac, ma deve essere lo stesso per altri sistemi operativi tranne la posizione delle preferenze.

L'errore che otteniamo quando cerchiamo un pericoloso DELETEoperazione

Fai clic su Preferenze quando ricevi questo errore

Nella nuova finestra, deseleziona l'opzione Safe updates

Deseleziona gli aggiornamenti sicuri

Quindi chiudere e riaprire la connessione. Non è necessario riavviare il servizio.

Ora proveremo di DELETEnuovo con risultati positivi.

inserisci qui la descrizione dell'immagine

Allora, cosa c'è in questo aggiornamento sicuro? Non è una cosa cattiva. Questo è ciò che dice MySql al riguardo.

Utilizzando l' --safe-updatesopzione

Per i principianti, un'utile opzione di avvio è --safe-updates(o --i-am-a-dummy, che ha lo stesso effetto). È utile nei casi in cui potresti aver rilasciato una DELETE FROM tbl_namedichiarazione ma hai dimenticato la WHEREclausola. Normalmente, una tale dichiarazione cancella tutte le righe dalla tabella. Con--safe-updates , è possibile eliminare le righe solo specificando i valori chiave che le identificano. Questo aiuta a prevenire incidenti.

Quando si utilizza l' --safe-updatesopzione, mysql emette la seguente dichiarazione quando si collega al server MySQL:

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

È sicuro attivare questa opzione mentre si ha a che fare con il database di produzione. Altrimenti, devi stare molto attento a non cancellare accidentalmente dati importanti.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.