MySQL hata kodu: MySQL Workbench'te UPDATE sırasında 1175


817

Ben visiteddeğer 1 vermek için sütun güncellemeye çalışıyorum. MySQL çalışma tezgahı kullanın ve çalışma tezgahı içinde SQL editörü deyimi yazıyorum. Aşağıdaki komutu yazıyorum:

UPDATE tablename SET columnname=1;

Bana şu hatayı veriyor:

Güvenli güncelleme modunu kullanıyorsunuz ve ANAHTAR sütunu kullanan NEREDEN bir tabloyu güncellemeye çalıştınız. Güvenli modu devre dışı bırakmak için seçeneği değiştirin.

Ben talimatlarına ve ben işaretli safe updateseçeneğini Editardından menüde Preferencessonra SQL Editor. Aynı hata hala görünüyor ve bu değeri güncelleyemiyorum. Lütfen, neyin yanlış olduğunu söyle?


4
Bunun , tablonuzda ziyaret edilen = 0'ı ziyaret edilecek tüm satırları = 1 güncelleyeceğini biliyor musunuz? İstediğiniz bu mu?
Mark Byers

23
"Güvenli Güncelleştirmeler" in işaretini kaldırdıktan sonra aşağıdaki adımı izleyin: Sorgu -> Sunucuya Yeniden Bağlan. Şimdi sorgunuzu çalıştırın
Ripon Al Wasim

5
Bu değişikliğin etkili olması için MySQL Sunucusuna yeniden bağlanmanız (MySQL bağlantısını yeniden başlatmanız) gerekir.
Philip Olson

Yanıtlar:


1613

MySql oturumunuzda güvenli güncellemeler seçeneği ayarlanmış gibi görünüyor . Bu primary key, nerede yan tümcesinde bir anahtar (ör. ) Belirtmeden kayıtları güncelleyemeyeceğiniz veya silemeyeceğiniz anlamına gelir .

Deneyin:

SET SQL_SAFE_UPDATES = 0;

Yoksa kuralı (kullanımını takip etmek için sorguyu değiştirebilirsiniz primary keyiçinde where clause).


Ben zaten id ile aynı etkiye sahip GUI güvenli güncelleme seçeneğini devre dışı bıraktı komut yazdı bahsetti. Ancak cevabınız için teşekkürler, ama sorumu zaten yanıtladım. Sorunun ne olduğunu öğrenmek için cevabımı kontrol et.
Jüri A

8
GUI'deki seçeneği değiştirdikten sonra, ayarın doğru şekilde yapılması için veritabanına yeniden bağlanmanız gerekir.
Tim Koscielski

31
SET SQL_SAFE_UPDATES = 1Önemli bir güvenlik özelliği olduğundan, işiniz bittiğinde bunu geri ayarladığınızdan emin olun .
StockB

4
StockB'ye katılmıyorum ... SQL'i kullanırken daha iyi olurken devam etmek isteyebilirsiniz ... ama ne yaptığınızı öğrendikten sonra ... bu şey tamamen işe yaramaz. Zaten bir üretim sunucusunda eşyalarınızı geliştirmemelisiniz, bu yüzden karışıklık yapsanız bile, kırmanız gereken tek şey dev sunucunuzdur.
Mathieu Turcotte

3
Ben sadece bu seçeneği 11 yıl boyunca her zaman yanlış olarak her zamanki gibi son 6 ay içinde 20 kez aradığımı söylemeye geldim, ama şimdi bu geliştirme ve üretim konusunda doğru olan bir şirket üzerinde çalışıyorum. Varsayılan olarak 0'a ayarlamak için birçok neden vardır; örneğin, doğrudan csv'ye dışa aktarmak ve ardından dışa aktarılmış veya benzer bir şey olarak işaretlemek isteyebileceğiniz bağımsız özellikler geliştirdiğinizde. Diğer zamanlarda, açıkça pk filtresi olmayan global güncellemeler nedeniyle sinir bozucu. Gerçek bir kullanışlı özellikten ziyade bir noob koruması olarak görüyorum.
JoelBonetR

454

UPDATE komutunu çalıştırmadan önce aşağıdaki adımları izleyin: MySQL Workbench'te

  1. Git Edit->Preferences
  2. Click "SQL Editor"sekmesini ve uncheck"Güvenli Güncellemeler"check box
  3. Query-> Reconnect to Server // çıkış yapın ve sonra giriş yapın
  4. Şimdi SQL sorgunuzu yürütün

ps, MySQL arka plan programı yeniden başlatmaya gerek yok!


20
Sürüm 6.3 için adım 2 "Sql Editor"yerine yerine "Sql Queries"ve daha sonra alt için bir onay kutusu var"Safe Updates"
meconroy

1
eğer tek seferlik bir şey varsa, tekrar açmanızı öneririm, çünkü eğer dikkatli değilseniz verilerinizi kraliyetle emmek çok kolay
Frankenmint

2
teşekkürler conroy. Bir süre o kutuyu göremedim. Sadece pencereyi büyütmek zorunda kaldım.
arn-arn

Belki taşıdılar, ancak MySQL Workbench 6.0'da, "SQL Editor" değil "SQL Queries" altında
MPelletier

1
evet burada aynı, görmek için biraz aşağı kaydırmak zorunda kaldı.
Elon Zito

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

4
ne yazık ki diğer sorgu tabanlı çözümler benim için çalışmadı. Ama bunu yaptı! Güvenli güncellemeleri tekrar açmak için bir satır eklediğiniz için teşekkür ederiz.
SherylHohman

1
Bunu gerçekten seviyorum, çünkü hala güvende olurken muhtemelen en genel olanı.
Nae

117

SQL_SAFE_UPDATES'i 0 olarak ayarlamanıza gerek yok , gerçekten bu şekilde yapmaktan vazgeçiririm. Bir REASON için SAFE_UPDATES varsayılan olarak açıktır. Ne demek istediğimi biliyorsanız emniyet kemerleri ve diğer şeyleri olmayan bir araba kullanabilirsiniz;) WHERE deyimine, yazmak yerine, birincil anahtar gibi 0 ile karşılaştırılan her şeyle eşleşen bir KEY değeri ekleyin:

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.

Artık her kaydın (HER ZAMAN) beklediğiniz gibi güncellendiğinden emin olabilirsiniz.


3
Bu dahi!
Amos Long

takdir yanıtı: +1
Asif Raza

2
Haha, bu iyi bir numara. WHERE id > 0Bu çizgide hile olarak kullandım .
Csaba Toth

Benim için işe yaramıyor, bana aynı mesajı göstermeye devam ediyor. Çözdüm Güvenli güncelleme modunu şu şekilde devre dışı bırakarak: -Düzenle>> Tercihler -> Sql Editör ardından Güvenli güncelleme seçeneğinin işaretini kaldırın.
Abdelhadi Lahlou

2
Peki bu nasıl daha güvenli hale geliyor?
Matt Messersmith

107

Tek gereken: Yeni bir sorgu başlatın ve çalıştırın:

SET SQL_SAFE_UPDATES = 0;

Sonra: Çalışmaya çalıştığınız ve daha önce çalışmayan sorguyu çalıştırın.


7
SO'ya hoş geldiniz, tur sayfasını ve yardım sayfasını okuduğunuzdan emin olun ve bunun gibi cevaplar göndermekten kaçının, çünkü bunun altındaki birçok cevap tam olarak aynı şeyi söylüyor ve aylar önce gönderildi
WOUNDEDStevenJones

1
Sorguyu çalıştırdıktan sonra da bu seçeneği tekrar etkinleştirebilirsiniz.
kta

Bu cevap ne ekliyor? İki yıldan fazla bir süre sonra Habibillah ile aynı şeyi paylaştınız. Karma biçmek mi istiyorsunuz?
Luc


66

Hata Kodu: 1175. Güvenli güncelleme modunu kullanıyorsunuz ve ANAHTAR sütunu kullanan WHERE olmayan bir tabloyu güncellemeye çalıştınız. Güvenli modu devre dışı bırakmak için Tercihler -> SQL Editör'deki seçeneği değiştirin ve yeniden bağlanın.

"Güvenli Güncelleme Modu" nu geçici olarak KAPATIN

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

"Güvenli Güncelleme Modu" nu sonsuza dek KAPATIN

Mysql tezgah 8.0:

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

resim açıklamasını buraya girin Eski sürüm şunları yapabilir:

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

41
  1. Tercihler ...
  2. "Güvenli Güncellemeler" ...
  3. Sunucuyu yeniden başlat

Tercihler ...

Güvenli Güncellemeler Sunucuyu yeniden başlat


Bu kabul edilen cevap
olmalıydı.

1
Sunucuyu yeniden başlatmanız gerekmez. Bağlantıyı basitçe kapatmak ve yeniden açmak yeterli olmalıdır.
Marc

1
MAC'de tercihler MySQLWorkbench üst menüsü altındadır.
zwitterion

36
SET SQL_SAFE_UPDATES=0;

VEYA

Adresine git Edit --> Preferences

Click SQL Queries sekmesini ve işaretini kaldırın Safe Updates onay kutusunu

Query --> Reconnect to Server

Şimdi sql sorgunuzu yürütün


26

Güvenli bir moddaysanız, nerede yan tümcesinde kimlik sağlamanız gerekir. Yani böyle bir şey işe yaramalı!

UPDATE tablename SET columnname=1 where id>0

1
Bu sayfa bu gerçeği onaylıyor: bennadel.com/blog/…
DivDiff

20

WorkBench'te çözdüm Güvenli güncelleme modunu devre dışı bırakarak:

-Düzenle -> Tercihler -> Sql Editör ardından Güvenli güncelleme seçeneğinin işaretini kaldırın.


7
Bu çalışıyor, ancak MySQL Workbench'i yeniden başlatmak zorunda kaldım.
Lanil Marasinghe

17

Cevabı buldum. Sorun şema adıyla tablo adının önünde olması gerektiğiydi. yani, komut şöyle olmalıdır:

UPDATE schemaname.tablename SET columnname=1;

Hepinize teşekkürler.


5
Sol paneldeki şemayı seçerek şema adından bahsetmekten kaçınabilirsiniz. Sol panelde şema seçilmesi, seçilen şemayı / veritabanını kullandığınız anlamına gelir
Ripon Al Wasim

10
Bu, soruda (ve başlıkta) açıklanan sorunu çözmek için cevap değildir. Başka birini kabul edilmiş olarak işaretlemelisiniz.
T30

Şemaadı ile denedim ama aynı hatayı alıyorum, güncelleme qms-active-db.gh_table set bookmark = '1660_207100000001000'
Code_Mode

3
Bu cevap değil!
Ezekiel Victor

1
yanlış cevap, doğru cevap Habibillah tarafından cevaplanmıştır (aşağıda)
hariharan s

14

MySQL Workbech sürüm 6.2'de Tercih SQLQueriesseçeneklerinden çıkmayın .

Bu durumda olası kullanım: SET SQL_SAFE_UPDATES=0;


1
Var, ancak seçenek şimdi "SQL Editor" altında.
Philip Olson

Bu seçeneği görmüyorum. Lütfen ekran görüntüsü alabilirsiniz. Teşekkürler
ferdiado

Tercihler -> SQL Düzenleyici sekmesini açın -> altta. 6.2-beta sürümünde bu seçenek yoktu, bu yüzden belki de 6.2.3+ sürümüne yükseltmeniz gerekir.
Philip Olson


12

En basit çözüm satır sınırını tanımlamak ve yürütmektir. Bu, güvenlik amacıyla yapılır.


2
Bu çözümde +1. Sütun = 'xyz' sınırının bulunduğu
TABLO'dan

2
Bu cevap kabul edilen cevap olmalı çünkü en az güvensiz yol.
Julian

7

Soru cevaplandığından ve güvenli güncellemelerle ilgisi olmadığından, burası yanlış yer olabilir; Sadece bilgi eklemek için gönderirim.

İyi bir vatandaş olmaya çalıştım ve güncellenecek kimlikleri geçici tablo kullanmak için sorguyu değiştirdim:

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

Başarısızlık. Güncellemeyi şu şekilde değiştirdi:

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

İşe yaradı. Peki golly - Ben her zaman güvenli güncelleme kontrolünü almak için anahtar <> 0 ekliyorsanız, hatta SQL_SAFE_UPDATE = 0 ayarlamak, o zaman benim sorgu 'onay' kaybettim. Sadece seçeneği kalıcı olarak kapatabilirim. Bir yerine iki adımlı bir işlem silmeyi ve güncellemeyi varsayalım .. ama yeterince hızlı yazarsanız ve anahtarın özel olmaktan ziyade sadece bir sıkıntı olarak düşünmeyi bırakırsanız ..


4

Doğru, bu çoğu örnek için anlamsızdır. Ama son olarak, aşağıdaki ifadeye geldim ve iyi çalışıyor:

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

3

Bu Mac içindir, ancak tercihlerin konumu dışındaki diğer işletim sistemleri için aynı olmalıdır.

Güvenli olmayan bir DELETEişlemi denediğimizde karşılaştığımız hata

Bu hatayı aldığınızda tercihleri ​​tıklayın

Yeni pencerede seçeneğin işaretini kaldırın Safe updates

Güvenli güncellemelerin işaretini kaldırın

Ardından bağlantıyı kapatın ve yeniden açın. Hizmeti yeniden başlatmanıza gerek yoktur.

Şimdi DELETEtekrar başarılı sonuçlarla deneyeceğiz .

resim açıklamasını buraya girin

Peki bu güvenli güncellemeler hakkında ne var? Kötü bir şey değil. MySql bunun hakkında söylüyor.

--safe-updatesSeçeneği Kullanma

Yeni başlayanlar için, yararlı bir başlangıç ​​seçeneği --safe-updates(veya --i-am-a-dummyaynı etkiye sahip). Bir DELETE FROM tbl_nameifade vermiş ancak WHEREmaddeyi unutmuş olabileceğiniz durumlar için faydalıdır . Normalde, böyle bir ifade tablodaki tüm satırları siler. İle--safe-updates satırları yalnızca onları tanımlayan anahtar değerleri belirterek silebilirsiniz. Bu kazaların önlenmesine yardımcı olur.

--safe-updatesSeçeneği kullandığınızda , mysql MySQL sunucusuna bağlandığında aşağıdaki ifadeyi yayınlar:

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

Üretim veritabanı ile uğraşırken bu seçeneği açmak güvenlidir. Aksi takdirde, önemli verileri yanlışlıkla silmemeye çok dikkat etmelisiniz.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.