- Konu sahibi
- #1
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
Bir hata çıktısında genellikle üç önemli bölüm bulunur:
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.
Aşağıdaki sorgu çalıştırıldığında:
şu hata alınabilir:
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:
Hata türünü ilk aşamada şu şekilde sınıflandırmak pratik olur:
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.
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
Ü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.
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 | Örnek | Anlamı |
|---|---|---|
| Hata numarası | 1146 | MySQL'e özgü sayısal hata kodudur. |
| SQLSTATE | 42S02 | Daha genel ve standartlaştırılmış hata sınıfını belirtir. |
| Mesaj | Table ... doesn't exist | Sorunun 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
- 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.
- 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.
- Sorguda kullanılan veritabanı, tablo ve sütun adlarını doğrulayın.
SELECT DATABASE(),SHOW TABLESveDESCRIBE tablo_adibu kontrol için kullanılabilir. - Sorgu sözdizimini gözden geçirin. Örneğin
SELECT name email FROM users;geçerli SQL olarak yorumlanabilir:emailikinci sütun yerinenamesütununun takma adı olur. Açık biçim şu şekildedir:SELECT name, email FROM users; - 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.
- 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:
| Belirti | Muhtemel alan | İlk kontrol |
|---|---|---|
You have an error in your SQL syntax | Sorgu yazımı | Virgül, parantez, anahtar kelime ve tırnaklar |
Table ... doesn't exist | Veritabanı veya tablo yapısı | SELECT DATABASE() ve SHOW TABLES |
Unknown column | Sütun adı veya sorgu kapsamı | DESCRIBE tablo_adi ve sütun yazımı |
Access denied | Kimlik doğrulama veya yetki | Kullanı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.