Ik probeer de kolom visited
bij te werken om deze de waarde 1 te geven. Ik gebruik MySQL-workbench en ik schrijf het statement in de SQL-editor vanuit de workbench. Ik schrijf het volgende commando:
UPDATE tablename SET columnname=1;
Ik krijg de volgende foutmelding:
Je gebruikt de veilige update-modus en je hebt geprobeerd een tabel bij te werken zonder
a WHERE dat een KEY-kolom gebruikt Om de veilige modus uit te schakelen, schakelt u de optie in
….
Ik volgde de instructies en schakelde de optie safe update
uit in het menu Edit
, vervolgens Preferences
en vervolgens SQL Editor
. Dezelfde fout verschijnt nog steeds & Ik kan deze waarde niet bijwerken. Vertel me alsjeblieft wat er aan de hand is?
Antwoord 1, autoriteit 100%
Het lijkt erop dat uw MySql-sessie de safe-updates optieingesteld. Dit betekent dat u geen records kunt bijwerken of verwijderen zonder een sleutel (bijv. primary key
) op te geven in de waar-clausule.
Probeer:
SET SQL_SAFE_UPDATES = 0;
Of u kunt uw zoekopdracht aanpassen om de regel te volgen (gebruik primary key
in where clause
).
Antwoord 2, autoriteit 27%
Volg de volgende stappen voordat u de opdracht UPDATE uitvoert:
In MySQL-werkbank
- Ga naar
Edit
–>Preferences
- Klik op het tabblad
"SQL Editor"
enuncheck
“Veilige updates”check box
Query
–>Reconnect to Server
// uitloggen en dan inloggen- Voer nu uw SQL-query uit
ps, het is niet nodig om de MySQL-daemon opnieuw te starten!
Antwoord 3, autoriteit 10%
SET SQL_SAFE_UPDATES=0;
UPDATE tablename SET columnname=1;
SET SQL_SAFE_UPDATES=1;
Antwoord 4, autoriteit 9%
SET SQL_SAFE_UPDATES = 0;
# your code SQL here
SET SQL_SAFE_UPDATES = 1;
Antwoord 5, autoriteit 7%
Het is niet nodig om SQL_SAFE_UPDATES op 0 in te stellen, ik zou het echt ontmoedigen om het op die manier te doen. SAFE_UPDATES is standaard ingeschakeld om een REDEN. Je kunt autorijden zonder veiligheidsgordels en andere dingen als je begrijpt wat ik bedoel 😉
Voeg gewoon in de WHERE-component een KEY-waarde toe die overeenkomt met alles zoals een primaire sleutel in vergelijking met 0, dus in plaats van te schrijven:
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.
Nu kunt u er zeker van zijn dat elk record (ALTIJD) wordt bijgewerkt zoals u verwacht.
Antwoord 6, autoriteit 6%
Het enige dat nodig is, is: Start een nieuwe zoekopdracht en voer het volgende uit:
SET SQL_SAFE_UPDATES = 0;
Vervolgens: voer de query uit die u probeerde uit te voeren en die voorheen niet werkte.
Antwoord 7, autoriteit 4%
Foutcode: 1175. U gebruikt de veilige update-modus en u probeerde een tabel bij te werken zonder een WHERE die een KEY-kolom gebruikt. Om de veilige modus uit te schakelen, schakelt u de optie in Voorkeuren -> SQL Editor en maak opnieuw verbinding.
Schakel “Veilige updatemodus” tijdelijk UIT
SET SQL_SAFE_UPDATES = 0;
UPDATE options SET title= 'kiemvieclam24h' WHERE url = 'http://kiemvieclam24h.net';
SET SQL_SAFE_UPDATES = 1;
Zet “Veilige updatemodus” voor altijd UIT
Mysql-werkbank 8.0:
MySQL Workbench => [ Edit ] => [ Preferences ] -> [ SQL Editor ] -> Uncheck "Safe Updates"
MySQL Workbench => [Edit] => [Preferences] => [SQL Queries]
Antwoord 8, autoriteit 2%
- Voorkeuren…
- “Veilige updates”…
- Server herstarten
Antwoord 9, autoriteit 2%
SET SQL_SAFE_UPDATES=0;
OF
Ga naarEdit --> Preferences
KlikSQL Queries
en deselecteerSafe Updates
selectievakje
Query --> Reconnect to Server
Voer nu uw sql-query uit
Antwoord 10, autoriteit 2%
Als u zich in de veilige modus bevindt, moet u een id opgeven in de where-clausule. Dus zoiets als dit zou moeten werken!
UPDATE tablename SET columnname=1 where id>0
Antwoord 11
Op WorkBench heb ik het opgelost door de veilige update-modus te deactiveren:
-Bewerken -> Voorkeuren -> Sql Editor en schakel Veilige update uit.
Antwoord 12
De eenvoudigste oplossing is om de rijlimiet te definiëren en uit te voeren. Dit wordt gedaan voor veiligheidsdoeleinden.
Antwoord 13
Ik heb het antwoord gevonden. Het probleem was dat ik de tabelnaam vooraf moest laten gaan door de schemanaam. d.w.z. het commando moet zijn:
UPDATE schemaname.tablename SET columnname=1;
Bedankt allemaal.
Antwoord 14
In de MySQL Workbech-versie 6.2 worden de PreferenceSQLQueries
-opties niet afgesloten.
In dit geval is het mogelijk gebruik te maken van: SET SQL_SAFE_UPDATES=0;
Antwoord 15
Aangezien de vraag werd beantwoord en niets te maken had met veilige updates, is dit misschien de verkeerde plaats; Ik post alleen om informatie toe te voegen.
Ik heb geprobeerd een goede burger te zijn en heb de zoekopdracht aangepast om een tijdelijke tabel met ID’s te gebruiken die zou worden bijgewerkt:
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);
Mislukt. De update gewijzigd in:
update prime_table set field1 = '' where id <> 0 and id in (select id from ids);
Dat werkte. Nou golly — als ik altijd de waar-toets <> 0 om de veilige updatecontrole te omzeilen, of zelfs SQL_SAFE_UPDATE=0 in te stellen, dan ben ik de ‘controle’ op mijn vraag kwijt. Ik kan de optie net zo goed gewoon permanent uitschakelen. Ik veronderstel dat het verwijderen en bijwerken een proces van twee stappen maakt in plaats van één.. maar als je snel genoeg typt en niet meer denkt aan de sleutel die speciaal is, maar eerder als vervelend…
Antwoord 16
Dat is waar, dit is zinloos voor de meeste voorbeelden. Maar uiteindelijk kwam ik tot de volgende verklaring en het werkt prima:
update tablename set column1 = '' where tablename .id = (select id from tablename2 where tablename2.column2 = 'xyz');
Antwoord 17
Ook ik kreeg hetzelfde probleem, maar toen ik ‘veilige updates’ uitschakelde in Edit ->
Voorkeuren -> SQL-editor -> Veilige updates, nog steeds gebruik ik om het hoofd te bieden aan de
fout als “Foutcode 1175 veilige modus uitschakelen”
Mijn oplossing voor deze fout is alleen de primaire sleutel van de tabel te geven als deze niet is opgegeven en de kolom bij te werken met die primaire sleutelwaarde.
Bijv: UPDATE[tabelnaam] SETEmpty_Column = ‘Waarde’ WAAR
[naam primaire sleutelkolom] = waarde;
Antwoord 18
Dit is voor Mac, maar moet hetzelfde zijn voor andere besturingssystemen, behalve de locatie van de voorkeuren.
De fout die we krijgen als we een onveilige DELETE
-bewerking proberen
Deselecteer in het nieuwe venster de optie Safe Updates
Sluit vervolgens de verbinding en open deze opnieuw. U hoeft de service niet opnieuw te starten.
Nu gaan we de DELETE
opnieuw proberen met succesvolle resultaten.
Dus hoe zit het met deze veilige updates? Het is geen slechte zaak. Dit zegt MySql erover.
De optie --safe-updates
gebruiken
Voor beginners is een handige opstartoptie
--safe-updates
(of
--i-am-a-dummy
, wat hetzelfde effect heeft). Het is handig voor gevallen waarin u een instructieDELETE FROM tbl_name
hebt gegeven, maar
deWHERE
-clausule vergeten. Normaal gesproken verwijdert zo’n statement alles
rijen van de tafel. Met--safe-updates
kunt u rijen alleen verwijderen door:
specificeren van de belangrijkste waarden die ze identificeren. Dit helpt voorkomen
ongelukken.Wanneer u de optie
--safe-updates
gebruikt, geeft mysql het volgende
statement wanneer het verbinding maakt met de MySQL-server:
SET sql_safe_updates=1, sql_select_limit=1000, sql_max_join_size=1000000;
Het is veilig om deze optie in te schakelen terwijl u werkt met de productiedatabase. Anders moet je heel voorzichtig zijn dat je niet per ongeluk belangrijke gegevens verwijdert.
Antwoord 19
typ gewoon SET SQL_SAFE_UPDATES = 0; vóór het verwijderen of bijwerken en opnieuw instellen op 1
SET SQL_SAFE_UPDATES = 1
Antwoord 20
Als u dit probleem ondervindt in een opgeslagen procedure en u de sleutel in de WHERE-component niet kunt gebruiken, kunt u dit oplossen door een variabele te declareren die de limiet van de rijen bevat die moeten worden bijgewerkt en gebruik het dan in de update/verwijder-query.
DELIMITER $
CREATE PROCEDURE myProcedure()
BEGIN
DECLARE the_limit INT;
SELECT COUNT(*) INTO the_limit
FROM my_table
WHERE my_column IS NULL;
UPDATE my_table
SET my_column = true
WHERE my_column IS NULL
LIMIT the_limit;
END$