İçeriğe geç

Menü

Berk Akademi
Yorumlar Google yorumları Özel Ders Başvuru Ücretsiz ön görüşme Ana Sayfa

MySQL "Error Code: 1175 safe update mode" Hatası Nasıl Çözülür?

mysql-error-code-1175-safe-update-mode-hatasi-nasil-cozulur
Bu yazıda neler var?
  1. Error Code 1175 safe update mode hatası neden çıkar?
  2. En doğru çözüm WHERE koşuluna anahtar eklemektir
  3. Geçici çözümde SQL_SAFE_UPDATES ayarını geri aç
  4. Workbench ayarını kalıcı kapatmak neden risklidir?
  5. Sık Sorulan Sorular

MySQL “Error Code: 1175 safe update mode” hatası, bir UPDATE veya DELETE işleminin yeterince sınırlandırılmadığını düşündüren güvenlik denetimi devreye girdiğinde görülür. Çözüm olarak sorguyu hedef satırları belirleyen bir anahtar sütunla daraltabilir, değişiklikten önce aynı koşulu kullanan bir SELECT ile kontrol edebilirsin.

Bu hata, kalıcı olarak güvenlik denetimini kapatmadan da çözülebilir. Özellikle toplu veri değişikliklerinde hedef satırları önce incelemek, yanlış kayıtların güncellenmesini önlemeye yardımcı olur.

Error Code 1175 safe update mode hatası neden çıkar?

Error Code 1175 safe update mode hatası neden çıkar?

Hata, güvenli güncelleme denetiminin UPDATE veya DELETE sorgusunu geniş kapsamlı bulması nedeniyle çıkar. MySQL belgelerinde Error 1175 için kullanılan mesaj, “You are using safe update mode and you tried to update a table without a WHERE that uses a KEY column.” şeklindedir. sql_safe_updates etkin olduğunda, sorguda anahtar sütun kullanan bir WHERE koşulu ya da uygun bir LIMIT bulunmayan veri değiştirme işlemleri reddedilebilir.

Birincil anahtar, tablodaki her satırı diğer satırlardan ayırt eden benzersiz sütundur. Örneğin ogrenciler tablosundaki id sütunu birincil anahtarsa, belirli öğrencileri bu sütundaki değerlerle hedefleyebilirsin. Oturum ise mevcut veritabanı bağlantısının çalışma bağlamıdır; sql_safe_updates gibi oturum kapsamındaki ayarlar, bağlantı içinde çalıştırılan sorguları etkiler.

MySQL sunucusunda sql_safe_updates değişkeninin varsayılan değeri OFF olarak belgelenir. MySQL Workbench içindeki Safe Updates tercihi ise varsayılan olarak etkin gelir ve anahtar sütunla sınırlandırılmayan ya da LIMIT içermeyen UPDATE ve DELETE sorgularını çalıştırmadan önce kontrol eder. Bu nedenle aynı sorgu, farklı istemci veya bağlantı ayarlarında farklı sonuç verebilir.

En doğru çözüm WHERE koşuluna anahtar eklemektir

Güvenli ve kalıcı çözüm, hedef satırları birincil anahtar üzerinden açıkça sınırlandırmaktır. Aşağıdaki örnekte ogrenciler.id sütununun birincil anahtar olduğu varsayılmıştır.

UPDATE ogrenciler
SET sinif = '10A'
WHERE sinif = '9A';

Bu sorgu, sinif değeri 9A olan bütün kayıtları hedefler. sinif sütunu bir anahtar sütun değilse sorgu safe update denetimine takılabilir. Önce değişecek satırları görmek için aynı koşulu bir SELECT sorgusunda kullanabilirsin:

SELECT id, sinif
FROM ogrenciler
WHERE sinif = '9A';

Bu sorgunun 101, 102 ve 103 numaralı kayıtları döndürdüğünü varsayalım. Bu durumda güncellemeyi doğrulanan birincil anahtar değerleriyle sınırlandırmak daha kontrollü olur:

UPDATE ogrenciler
SET sinif = '10A'
WHERE id IN (101, 102, 103)
  AND sinif = '9A';

Ön kontrol ve güncelleme aynı hedef kümesini gösterir. Böylece listede bulunmayan kayıtlar değişmez. Ayrıca sinif = '9A' koşulu, güncelleme anında sınıfı değişmiş olan bir kaydın yanlışlıkla yeniden hedeflenmesini önlemeye yardımcı olur. MySQL’de WHERE koşulu hangi satırların güncelleneceğini belirler; birincil anahtar değerlerini açıkça kullanmak, toplu değişikliklerin kapsamını daha görünür hâle getirir.

Geçici çözümde SQL_SAFE_UPDATES ayarını geri aç

Geçici çözümde SQL_SAFE_UPDATES ayarını geri aç

Safe update denetimini bir oturum için geçici olarak kapatmak, yalnızca hedef satırları önceden kontrol ettikten ve çalıştırılacak UPDATE sorgusunu bilinçli biçimde sınırlandırdıktan sonra kullanılmalıdır. Bu yöntemde denetimi kapatır, anahtar sütunla sınırlandırılmış sorguyu çalıştırır ve işlem biter bitmez yeniden açarsın.

SQL_SAFE_UPDATES bir Boolean sistem değişkenidir. SET SQL_SAFE_UPDATES = 0; ifadesi mevcut bağlantı oturumunda denetimi kapatır, SET SQL_SAFE_UPDATES = 1; ifadesi ise aynı oturumda yeniden etkinleştirir. Bu kullanım global ayarı değiştirmediği için başka bağlantıların oturum değerlerini etkilemez.

Aşağıdaki örnekte önce id değeri 12 olan öğrencinin bölüm bilgisi güncelleniyor:

SET SQL_SAFE_UPDATES = 0;

UPDATE ogrenciler
SET bolum = 'Bilgisayar Programcılığı'
WHERE id = 12;

SET SQL_SAFE_UPDATES = 1;

Burada id birincil anahtar olarak kullanıldığı için hedef satır açıkça belirlenir. Safe update denetimini kapatmış olsan bile WHERE id = 12 koşulunu kaldırma. İşlem tamamlandığında ayarı yeniden 1 değerine getirmek, sonraki sorgularda koruyucu kontrolün çalışmaya devam etmesini sağlar.

Workbench ayarını kalıcı kapatmak neden risklidir?

MySQL Workbench tercihinden Safe Updates kontrolünü kalıcı olarak kapatmak, sonraki UPDATE ve DELETE işlemlerinde büyük kapsamlı değişikliklere karşı kullanılan denetimi azaltabilir. Workbench belgelerinde bu tercih, SQL Editor ayarları içinde Safe Updates (rejects UPDATEs and DELETEs with no restrictions) adıyla yer alır ve değişikliğin etkili olması için MySQL sunucusuna yeniden bağlanılması gerekir.

Ayarı değiştirmek için Workbench'te Edit > Preferences > SQL Editor yolunu açıp Safe Updates seçeneğini yönetebilirsin. Ancak bu seçeneği kalıcı olarak kapatmak yerine sorguyu güvenli hâle getirmek daha sağlıklı bir çalışma alışkanlığıdır.

  1. Aynı WHERE koşulunu kullanan bir SELECT sorgusu çalıştır.
  2. Etkilenecek satırları ve değişecek sütunları incele.
  3. Sonucu doğruladıktan sonra anahtar sütunla sınırlandırılmış UPDATE sorgusunu çalıştır.

Örneğin önce şu sorguyla hedef satırı kontrol edebilirsin:

SELECT id, bolum
FROM ogrenciler
WHERE id = 12;

UPDATE ogrenciler
SET bolum = 'Bilgisayar Programcılığı'
WHERE id = 12;

Safe Updates seçeneğini kalıcı olarak kapatmak yerine bu kontrol sırasını kullanmak, sorgunun hangi satırları etkileyeceğini işlemden önce görmeni sağlar. MySQL, safe update etkin olduğunda anahtar sütun içeren bir WHERE koşulu veya LIMIT bulunmayan bazı UPDATE ve DELETE sorgularını engelleyebilir.

Sık yapılan üç hata

  • Hata mesajını görür görmez Workbench'teki Safe Updates seçeneğini kalıcı olarak kapatmak.
  • SQL_SAFE_UPDATES değerini 0 yaptıktan sonra işlem bitince 1 değerine döndürmemek.
  • Sorgunun daha fazla satırı değiştirmemesi için gerekli WHERE koşulunu tamamen kaldırmak.

Sık Sorulan Sorular

Error Code 1175 safe update mode hatası tam olarak ne anlama gelir?

Bu hata, safe update denetimi açıkken çalıştırılan UPDATE veya DELETE sorgusunun anahtar sütun içeren bir WHERE koşulu ya da uygun bir LIMIT sınırı taşımadığı için engellendiğini ifade eder. Amaç, yanlışlıkla çok sayıda satırın değiştirilmesini veya silinmesini önlemektir.

SET SQL_SAFE_UPDATES = 0 komutu ne kadar süre etkili olur?

Bu komut kendi başına bir süre sayacı başlatmaz. Değer, aynı bağlantı oturumunda 0 olarak kalır; sen SET SQL_SAFE_UPDATES = 1; komutuyla yeniden açabilir veya bağlantıyı sonlandırabilirsin. Yeni bağlantıların başlangıç ayarı, o bağlantı için uygulanan yapılandırmaya göre belirlenir.

MySQL Workbench'te Safe Updates ayarını değiştirince yeniden bağlanmak gerekir mi?

Evet, Workbench'teki Safe Updates tercihinin etkili olması için MySQL sunucusuna yeniden bağlanmak gerekir. Tercih yolu Edit > Preferences > SQL Editor bölümüdür.

WHERE koşuluna LIMIT eklemek Error Code 1175 hatasını her durumda çözer mi?

Hayır, LIMIT her durumda doğru çözüm değildir. Safe update denetimi açısından bir sınır sağlayabilir, ancak hangi satırların seçileceğini tek başına açıkça belirtmez. Hedef satırları belirlemek için anahtar sütun içeren bir WHERE koşulu kullanmak ve işlemden önce aynı koşulla SELECT çalıştırmak daha kontrollüdür.

Safe update mode hatasını aşmanın en güvenli yolu, denetimi kalıcı olarak kapatmak yerine hedef satırları önce görmek ve değişikliği anahtar sütunla sınırlandırmaktır.

Bu içerik aradığın cevabı verdi mi?
Yanıtın, hangi yazıları geliştirmemiz gerektiğini anlamamıza yardımcı olur.
Bu içeriğin üretilmesinde yapay zeka araçlarından destek alınmıştır.

Bu konudan sonra ne okuyabilirsin?

Tüm yazılar

İlgili Eğitimler

Berk Keskin, yazılım geliştirici ve eğitmen
Yazar

Berk Keskin Kimdir?

Yazılıma 12 yaşında başladı; İzmir Ekonomi Üniversitesi'ni bölüm birincisi ve yüksek şeref öğrencisi olarak tamamladı. Bugün yalnızca eğitim vermekle kalmıyor, sektörde aktif olarak yazılım projeleri geliştiriyor ve gerçek dünya deneyimini birebir derslerine taşıyor. Ezberden uzak, mühendislik zihniyetini merkeze alan sürdürülebilir öğrenme sistemleri tasarlayarak sorgulayan, üreten ve problem çözebilen yeni nesil yazılımcılar yetiştiriyor.

Sektörel Deneyim & Projeler

  • Ticarify Entegrasyon Yazılım logosu CEO Ticarify Entegrasyon YazılımPazaryerleri ve e-ticaret sitelerine otomatik e-fatura kesimi, sipariş ve kargo takibi hizmetleri sunan e-Dönüşüm platformunun API mimarisini ve yazılım ekibini yönetmektedir.
  • Benim Düğünüm logosu CEO Benim DüğünümDijital etkinlik ve anı paylaşım platformu.
  • Siberdizayn logosu Yazılım Ekibi Lideri SiberdizaynYüksek anlık oyuncu trafiğine sahip oyun kontrol panelleri ve sunucu altyapıları geliştiren yazılım ekibine liderlik etmektedir.
  • MEDYOGRAFYA 360° Dijital Çözümler logosu Dijital Strateji Lideri MEDYOGRAFYA 360° Dijital ÇözümlerŞirketlerin dijital çözümlerde uzun vadede nasıl ilerlemesi gerektiği ve dijital dönüşüm süreçlerinin yönetilmesine destek olmaktadır.
  • İzmir Ekonomi Üniversitesi logosu Danışma Kurulu Üyesi İzmir Ekonomi ÜniversitesiMezun olduğu üniversitesinde, Bilgisayar Programcılığı bölümünün akademik müfredatını güncel sektör ihtiyaçlarına göre şekillendirmek adına Danışma Kurulu'nda görev almaktadır.
WhatsApp Hemen Ara