İçeriğe geç

Menü

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

MySQL “ERROR 1046 (3D000): No database selected” Hatası Nasıl Çözülür?

mysql-error-1046-no-database-selected-hatasi-cozumu
Bu yazıda neler var?
  1. ERROR 1046 hatası neden oluşur?
  2. USE komutuyla veritabanı nasıl seçilir?
  3. Tablonun tam adıyla sorgu nasıl çalıştırılır?
  4. Bağlantıda ve SQL dosyasında veritabanı nasıl belirtilir?

MySQL ERROR 1046 (3D000): No database selected hatasını gidermek için işlem yapacağın veritabanını USE veritabani_adi; komutuyla seçebilirsin. Alternatif olarak sorgunda tablonun adını veritabanı adıyla birlikte belirtebilirsin. Veritabanının mevcut olduğundan ve hesabının ilgili işlem için gerekli yetkilere sahip olduğundan da emin olmalısın.

ERROR 1046 hatası neden oluşur?

ERROR 1046 hatası neden oluşur?

Bu hata, MySQL bir işlem için kullanılacak varsayılan veritabanını bulamadığında ortaya çıkar. MySQL hata kodunu 1046, SQLSTATE değerini 3D000 ve mesajını No database selected olarak bildirir.

MySQL sunucusunda birden fazla veritabanı bulunabilir ve her veritabanı kendi tablolarını içerebilir. Örneğin okul veritabanında ogrenciler adlı bir tablo tutulabilir.

Oturum, sunucuya bağlantın süresince komutlarını yürüttüğün çalışma bağlamıdır. Etkin veritabanı ise veritabanı adı ayrıca belirtilmeyen nesneler için o oturumda kullanılan varsayılan veritabanıdır.

Sunucuya bağlandığında etkin bir veritabanı seçili olmayabilir. Böyle bir oturumda tabloyu yalnızca ogrenciler adıyla oluşturmaya veya sorgulamaya çalışırsan MySQL hangi veritabanını kullanacağını belirleyemediği için bu hatayı verebilir.

USE komutuyla veritabanı nasıl seçilir?

USE okul; komutu, erişim yetkin varsa okul veritabanını bulunduğun oturum için etkin hâle getirir. Ardından veritabanı adını tekrar yazmadan o veritabanındaki tablolarla çalışabilirsin.

Aşağıdaki örnekte veritabanı ve tablo oluşturma yetkisine sahip bir hesap kullanılır. Önce örnek veritabanını oluştur; okul zaten varsa bu adımı atlayabilirsin.

CREATE DATABASE okul;

Bir veritabanını oluşturmak onu otomatik olarak etkinleştirmez. Hata senaryosunu görmek için etkin veritabanı seçilmemiş bir oturumda aşağıdaki komutu çalıştır.

CREATE TABLE ogrenciler (
    id INT PRIMARY KEY,
    ad VARCHAR(100)
);

Bu koşulda beklenen hata şöyledir:

ERROR 1046 (3D000): No database selected

Şimdi erişebildiğin veritabanlarını listele:

SHOW DATABASES;

Çıktıda okul adını görmelisin. Listenin geri kalanı sunucudaki veritabanlarına ve hesabının yetkilerine göre değişebilir.

Ardından veritabanını seç ve seçimi kontrol et:

USE okul;
SELECT DATABASE();

USE başarılı olduğunda Database changed mesajı görülür. SELECT DATABASE() sorgusunun sonucu ise okul olur; etkin veritabanı seçili değilse sonuç NULL döner.

Son olarak tablo oluşturma komutunu tekrar çalıştır:

CREATE TABLE ogrenciler (
    id INT PRIMARY KEY,
    ad VARCHAR(100)
);

Hesabının gerekli yetkileri varsa ve ogrenciler tablosu daha önce oluşturulmamışsa komut başarılı olur. Tablo artık etkin veritabanı olan okul içinde bulunur.

Tablonun tam adıyla sorgu nasıl çalıştırılır?

Tablonun tam adıyla sorgu nasıl çalıştırılır?

Etkin bir veritabanı seçmeden de tabloyu veritabanı.tablo biçiminde yazarak sorgulayabilirsin. Önceki bölümde oluşturulan tablo için örnek sorgu şöyledir:

SELECT * FROM okul.ogrenciler;

Buradaki okul.ogrenciler ifadesi, MySQL’e ogrenciler tablosunun okul veritabanında bulunduğunu açıkça belirtir. Tablo oluşturulurken içine herhangi bir kayıt eklenmediyse sorgu başarıyla çalışır, ancak sonuç kümesi boş olur. İstemci bu durumu boş sonuç kümesi olarak gösterir.

Bu kullanımda USE komutu çalıştırılmaz. Çünkü sorgunun içinde veritabanı adı zaten verilmiştir. USE okul; komutu ise oturumun etkin veritabanını değiştirir ve bundan sonra veritabanı adı yazılmadan kullanılan tablo adlarının hangi veritabanında aranacağını belirler. Nitelendirilmiş tablo adlarıyla ilgili ayrıntıları MySQL Identifier Qualifiers belgelerinde inceleyebilirsin.

Veritabanı adını yanlış yazarsan ya da hesabın bu veritabanına erişemiyorsa sorgu boş sonuç döndürmek yerine başka bir hata verebilir. Bu durumda yalnızca sorgunun son satırına bakmak yerine dönen hata kodunu ve iletiyi birlikte kontrol et. Veritabanının gerçekten mevcut olup olmadığını ve hesabın gerekli erişime sahip olup olmadığını da ayrıca doğrula.

Bağlantıda ve SQL dosyasında veritabanı nasıl belirtilir?

Veritabanını MySQL bağlantısı kurulurken seçmek için veritabanı adını komutun sonuna ekleyebilirsin:

mysql -u kullanici -p okul

Bu komutta -u kullanıcı adını, -p ise parola istemini belirtir. Komutu çalıştırdıktan sonra parola istemi açılır ve parolayı orada girersin. Parolayı komutun içine açık biçimde yazmak, komut geçmişinde veya ekran kayıtlarında görünmesine yol açabileceği için tercih edilmez. Bağlantı sırasında veritabanı adı verilmesi, oturumun başlangıçta okul veritabanını kullanmasını sağlar.

Bir SQL dosyasını doğrudan belirli bir veritabanına bağlanarak çalıştırmak için komut şu şekilde yazılabilir:

mysql -u kullanici -p okul < dosya.sql

Buradaki < işareti, dosyanın içeriğini MySQL istemcisinin standart girdisi olarak çalıştırır. Alternatif olarak, veritabanı adını komutta belirtmeden SQL dosyasının başına şu satırı ekleyebilirsin:

USE okul;

Bu durumda dosya şöyle çalıştırılabilir:

mysql -u kullanici -p < dosya.sql

Dosyanın ilerleyen satırlarında başka bir USE komutu varsa etkin veritabanı değişir. Bu nedenle dosyada kullanılan tabloların hangi veritabanına ait olduğunu ve her işlemden önce hangi veritabanının seçili bulunduğunu kontrol etmek gerekir. Dosya çalıştırılmadan önce ilgili veritabanının mevcut olması ve bağlantı kuran hesabın gerekli yetkilere sahip bulunması da önemlidir. SQL dosyasından komut çalıştırma biçimi için MySQL istemcisinin metin dosyasından SQL çalıştırma belgelerine bakabilirsin.

ERROR 1046 hatasını çözerken temel kontrol noktası, sorgunun etkin bir veritabanına mı dayandığı yoksa tablo adının veritabanıyla birlikte mi yazıldığıdır. Bu ayrımı kontrol ettiğinde bağlantı komutundaki, SQL dosyasındaki ve sorgudaki veritabanı kullanımını daha kolay karşılaştırabilirsin.

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