Mehmet

WFN Üye
Konular
1,204
Mesajlar
1,205
Çözüm
0
Ticaret Puanı
0
Üyelik
1 Ay 6 Gün
Konum
YurtDışı
Web Sitesi
Var
Alanı
Google Adsense
1/1
Konu sahibi
MySQL error, MySQL sunucusunun veya bağlantı sağlayan istemci/yazılım katmanının bir işlemi tamamlayamadığını bildiren hata çıktısıdır. “MySQL error” tek başına belirli bir hata değildir; gerçek nedeni anlamak için hata numarası, SQLSTATE değeri ve açıklama metni birlikte incelenmelidir. Örneğin ERROR 1146 (42S02): Table 'example_db.users' doesn't exist çıktısı, example_db içinde users tablosunun bulunamadığını belirtir.

MySQL error çıktısı nasıl okunur?​


Bir hata çıktısında genellikle üç önemli bölüm bulunur:

BölümÖrnekAnlamı
Hata numarası1146MySQL'e özgü sayısal hata kodudur.
SQLSTATE42S02Daha genel ve standartlaştırılmış hata sınıfını belirtir.
MesajTable ... doesn't existSorunun hangi nesne veya işlemle ilgili olduğunu açıklar.

Hata numarası MySQL'e özgüdür ve farklı veritabanı sistemlerinde aynı anlamı taşımayabilir. SQLSTATE beş karakterli bir değerdir; ancak özellikle istemci tarafındaki bazı hatalarda ayrıntılı ayrım yapmak için tek başına yeterli olmayabilir. Bu nedenle hata mesajının tamamını saklamak gerekir.

Somut örnek: tablo bulunamıyor​


Aşağıdaki sorgu çalıştırıldığında:

Kod:
USE example_db;
SELECT name, email FROM users;

şu hata alınabilir:

Kod:
ERROR 1146 (42S02): Table 'example_db.users' doesn't exist

Bu durumda sorun mutlaka tablonun silindiği anlamına gelmez. Yanlış veritabanı seçilmiş olabilir, tablo adı farklı yazılmış olabilir veya tablo henüz oluşturulmamış olabilir. Önce seçili veritabanını ve tabloları kontrol edin:

Kod:
SELECT DATABASE();
SHOW TABLES;
DESCRIBE users;

SHOW TABLES mevcut veritabanındaki erişilebilir tabloları listeler. DESCRIBE ise tablonun sütunlarını ve temel yapısını gösterir. Kullanıcının ilgili tabloyu görme yetkisi yoksa tablo listede görünmeyebilir; bu nedenle “liste boş” sonucunu doğrudan “tablo kesinlikle yok” şeklinde yorumlamayın.

MySQL error çözümünde izlenecek yol​


  1. Hata çıktısının tamamını alın. Sadece “MySQL error” ifadesini değil, hata numarasını, SQLSTATE değerini ve açıklama metnini kaydedin.
  2. Hatanın bağlantı kurulmadan önce mi, yoksa SQL sorgusu çalışırken mi oluştuğunu ayırın. Sunucu adı, port veya bağlantı sorunları sorgu sözdizimi hatalarından farklı incelenir.
  3. Sorguda kullanılan veritabanı, tablo ve sütun adlarını doğrulayın. SELECT DATABASE(), SHOW TABLES ve DESCRIBE tablo_adi bu kontrol için kullanılabilir.
  4. Sorgu sözdizimini gözden geçirin. Örneğin SELECT name email FROM users; geçerli SQL olarak yorumlanabilir: email ikinci sütun yerine name sütununun takma adı olur. Açık biçim şu şekildedir: SELECT name, email FROM users;
  5. Yetki hatalarında parolayı veya bağlantı bilgisini herkese açık şekilde paylaşmadan, kullanılan hesabın ilgili veritabanı ve tablo üzerindeki izinlerini kontrol edin.
  6. Uygulama kodunda işlemin gerçekten başarılı olup olmadığını kontrol edin. Hata oluştuğunda yalnızca mesajı ekrana basmak yerine, hata durumunu güvenli biçimde günlüğe kaydedin ve kullanıcıya teknik sırları göstermeyin.

Hata türünü ilk aşamada şu şekilde sınıflandırmak pratik olur:

BelirtiMuhtemel alanİlk kontrol
You have an error in your SQL syntaxSorgu yazımıVirgül, parantez, anahtar kelime ve tırnaklar
Table ... doesn't existVeritabanı veya tablo yapısıSELECT DATABASE() ve SHOW TABLES
Unknown columnSütun adı veya sorgu kapsamıDESCRIBE tablo_adi ve sütun yazımı
Access deniedKimlik doğrulama veya yetkiKullanıcı, sunucu ve izin kapsamı

Bu sınıflandırma kesin teşhis yerine ilk yönlendirmedir. Aynı görünen mesaj farklı bağlantı kitaplıklarında ek bilgilerle birlikte dönebilir.

Sık yapılan hatalar​


Hata kodunu görmeden yalnızca mesajın son kısmını aramak, benzer görünen sorunları birbirine karıştırabilir. Ayrıca tablo ve sütun adlarının yazımını kontrol etmeden doğrudan CREATE veya ALTER komutları çalıştırmak mevcut yapıyı daha da karmaşıklaştırabilir.

Üretim ortamında hata çözmek için veritabanı parolası, bağlantı dizesi, kullanıcı adı veya ayrıntılı sunucu çıktısı paylaşılmamalıdır. Destek isterken hata numarasını, SQLSTATE değerini, hassas bilgiler çıkarılmış sorguyu ve kullanılan MySQL sürümünü vermek genellikle yeterlidir. Uygulama tarafında da hata mesajının değişebileceği göz önünde bulundurulmalı; mümkün olduğunda hata kodu veya SQLSTATE gibi yapılandırılmış alanlar değerlendirilmelidir.

Sık sorulan sorular​

SQLSTATE HY000 tek bir sorunu mu gösterir?​

Hayır. HY000 genel hata değeridir; belirli bir SQLSTATE karşılığı olmayan sunucu hatalarında ve istemci kitaplığı hatalarında görülebilir. Gerçek ayrım için hata numarasını ve açıklamasını birlikte inceleyin.

Bir hata bütün transaction'ı geri alır mı?​

Her zaman değil. InnoDB'de deadlock tüm transaction'ın geri alınmasına yol açarken, kilit bekleme zaman aşımı varsayılan olarak yalnız başarısız statement'ı geri alır. Motoru, hata türünü ve ayarları kontrol etmeden önceki yazma işlemlerinin tümünün geri alındığını veya tekrar gönderilebileceğini varsaymayın.
 

Sende şimdi bize katılmak ister misin?

Kayıt ol

Bize katılım kolay ve ücretsizdir!

Konuyu görüntüleyenler

Bu konuyu şu anda görüntüleyen üye bulunmuyor.
Robotlar:
  • Anthropic