Ana içeriğe atla

MySQL Eğitimi: Yeni Başlayanlar İçin Kapsamlı Rehber

MySQL nedir ve en popüler veritabanı yönetim sistemlerinden birine nasıl başlayabileceğinizi keşfedin.
Güncel 3 Eki 2026  · 15 dk. oku

Yapay Zeka ile Keşfedin

ChatGPTClaudePerplexity

Veri, giderek dijitalleşen toplumumuzun temelini oluşturur. Mobil uygulamalardan ve bankacılık sistemlerinden arama motorlarına ve ChatGPT gibi yeni nesil yapay zekâ sohbet botlarına kadar, bu araçların hiçbiri veri olmadan mümkün olmazdı. Peki, bu verilerin tümü nerede saklanıyor hiç merak ettiniz mi? Tahmin ettiğiniz gibi: veritabanlarında.

Veritabanı, genellikle bir bilgisayar sisteminde saklanan, yapılandırılmış verilerin düzenli bir koleksiyonudur. Dünyadaki verilerin büyük bir kısmı ilişkisel veritabanlarında tutulur.

Bu eğitimde, popüler bir ilişkisel veritabanı yönetim sistemi (RDBMS) olan MySQL’e odaklanacağız. Oracle tarafından desteklenen MySQL; açık kaynaklı, güvenilir, ölçeklenebilir ve kullanıcı dostu bir veritabanıdır ve Meta, Netflix ve Airbnb gibi teknoloji alanındaki en önemli şirketler tarafından kullanılmaktadır.

Bu makaleyi okuduktan sonra, bilgisayarınıza kurulum yapmaktan veritabanları oluşturmaya, temel SQL sorgularını ve daha gelişmiş işlemleri gerçekleştirmeye kadar bu popüler ve köklü aracı kullanmaya hazır olacaksınız. Hazır mısınız? Hadi başlayalım!

Önkoşullar ve Temel Kavramlar

Birçok veritabanı türü vardır ve farklı türler, farklı veri türlerini saklamak için uygundur. Son yıllarda, artan veri formatı çeşitliliğini karşılamak için yeni veritabanı türleri geliştirildi. Sözde NoSQL veritabanlarının yükselişine rağmen, ilişkisel veritabanları hâlâ en popüler veritabanlarıdır.

İlişkisel veritabanları, satır ve sütunlardan oluşan, önceden tanımlanmış tablolar koleksiyonları şeklinde veriyi saklamak ve bunları bir veya daha fazla ilişki aracılığıyla birbirine bağlamak üzere tasarlanmıştır.

Veritabanları oluşturmanın, yönetmenin ve onlarla iletişim kurmanın standart yolu SQL’dir (Structured Query Language). SQL, piyasadaki en popüler sistemlerden bazılarının yapı taşıdır: PostgreSQL, SQLite ve MySQL.

Bu eğitimi takip edebilmek için temel düzeyde SQL bilgisi öneririz. Başlamak için harika bir yol: Introduction to SQL Kursumuz. Ayrıca bilgisayarınızda MySQL’in kurulu olması gerekecek; o hâlde MySQL’in nasıl yükleneceğini ele alalım.

MySQL Kurulumu

Aracı kurmak oldukça basittir. Bilgisayarınızın işletim sistemine göre resmi siteden doğru yükleyiciyi indirmeniz yeterlidir: macOS, Windows veya Linux.

macOS’te Kurulum

MySQL paket yükleyicisini indirdikten sonra, yükleyici sihirbazındaki talimatları izleyin. Standart kurulumu uygulayabilirsiniz; isterseniz “Customize” düğmesine tıklayarak kurulacak bileşenleri özelleştirebilirsiniz.

MySQL Paket Yükleyici Sihirbazı: Özelleştir.

MySQL Paket Yükleyici Sihirbazı: Özelleştir. Kaynak: MySQL

Yeni MySQL Sunucusunu başarıyla kurduktan sonra, parolalar için varsayılan şifreleme türünü seçerek, root parolasını belirleyerek ve başlangıçta MySQL sunucusunu etkinleştirerek (veya devre dışı bırakarak) yapılandırma adımlarını tamamlayın.

Paket yükleyiciyi kullanarak kurulum yaptığınızda, dosyalar /usr/local içinde, kurulum sürümü ve platform adıyla eşleşen bir dizine yüklenir.

Windows’ta Kurulum

Windows’ta MySQL kurulumu oldukça basittir. Önerilen yöntem, Windows Installer’ı indirip belirli bir MySQL sürümünü kurup yapılandırmasına izin vermektir. Varsayılan kurulumu kullanırsanız Windows, MySQL’i yerel ana makinede otomatik olarak başlatacaktır.

Linux’ta Kurulum

Linux, MySQL kurmak için çeşitli çözümleri destekler. MySQL, Oracle tarafından sağlanan dağıtımlardan birini kullanmanızı önerir; kurulum için kullanılabilecek birkaç yöntem vardır ve bunları belgelendirmede bulabilirsiniz.

MySQL’i Anlamak

MySQL’i kullanmaya başlamadan önce, MySQL’in nasıl çalıştığını incelemek faydalı olacaktır. Bazı temel kavramlarını ele alalım.

MySQL Mimarisi

Diğer birçok popüler ilişkisel veritabanı gibi MySQL de istemci-sunucu mimarisi olarak tasarlanmıştır.

Bu bilişim modelinde bir sunucu; verileri barındırmak, veritabanı izinlerini ve yapılandırmalarını yönetmek ve istemcinin talep ettiği kaynak ve hizmetlerin çoğunu karşılamak üzere tasarlanır.

Yaygın istemci-sunucu mimarilerinde genellikle tek bir merkezî sunucu ve birden fazla istemci bulunur. Bir bilgisayar, bir hizmet sunacak şekilde yapılandırılırsa sunucu olabilir. Ancak sunucular, yüksek hacimli istek ve verileri en iyi şekilde karşılayabilmek için genellikle çok güçlü ve büyük makineler olur.

Buna karşılık, istemciler herhangi bir tür bilgisayarda bulunabilir.

İstemci-sunucu mimarisi.

İstemci-sunucu mimarisi. Kaynak: DataCamp

MySQL’de bu iki bileşen MySQL istemcisi ve MySQL sunucusudur.

Veri Türleri

Veri türleri, bir sütunun hangi değerleri tutabileceğini belirlemek için kullanılır. SQL’in her sütunda ne tür veri beklemesi ve belirli bir sütuna karşı sorguları nasıl işlemesi gerektiğini anlamasına yardımcı olan bir tür üstveri (metadata) gibi çalışır.

MySQL, üç ana kategorideki standart SQL veri türlerini destekler:

  • Sayısal türler
  • Dizge (metin) türleri
  • Tarih ve saat türleri

Aşağıdaki tablolarda, MySQL’deki başlıca veri türlerine genel bir bakış bulabilirsiniz.

Sayısal Veri Türleri

Veri Türü

Açıklama

TINYINT

Çok küçük bir tamsayı.

SMALLINT

Küçük bir tamsayı.

MEDIUMINT

Orta boy bir tamsayı.

INT veya INTEGER

Standart bir tamsayı.

BIGINT

Büyük bir tamsayı.

FLOAT

Kayan noktalı sayı.

DOUBLE

Çift duyarlıklı kayan noktalı sayı.

DECIMAL veya NUMERIC

Sabit noktalı sayı.

Tarih ve saat veri türleri

Veri Türü

Açıklama

DATE

YYYY-MM-DD biçiminde bir tarih değeri.

TIME

HH:MM:SS biçiminde bir saat değeri.

DATETIME

YYYY-MM-DD HH:MM:SS biçiminde tarih ve saat değeri.

TIMESTAMP

YYYY-MM-DD HH:MM:SS biçiminde zaman damgası değeri.

YEAR

YYYY veya YY biçiminde bir yıl değeri.

Dizge veri türleri

Veri Türü

Açıklama

CHAR

Sabit uzunlukta dizge.

VARCHAR

Değişken uzunlukta dizge.

TINYTEXT

Çok küçük bir metin dizgesi.

TEXT

Küçük bir metin dizgesi.

MEDIUMTEXT

Orta boy bir metin dizgesi.

LONGTEXT

Büyük bir metin dizgesi.

ENUM

Önceden tanımlı bir değer listesinden seçilen tek bir değere sahip olabilen bir dizge nesnesi.

SET

Önceden tanımlı bir değer listesinden seçilen sıfır veya daha fazla değere sahip olabilen bir dizge nesnesi.

MySQL’e Erişim

MySQL’i bilgisayarınıza kurduktan sonra, terminalinizden kullanmaya başlayabilirsiniz. MySQL’i başlatmak için kullanıcı adınız ve buna bağlı parolanızla erişebilirsiniz. Bu örnekte, kurulum sırasında belirlediğimiz root parolasıyla birlikte root hesabıyla MySQL’e erişeceğiz. MySQL’in çalıştığı makinede oturum açtığımız için host (-h) parametresinde bilgi vermemize gerek yok:

> mysql -uroot -p

Yeni kullanıcılar eklemek isterseniz, şunu yazın:

> CREATE USER 'username' IDENTIFIED BY 'password';

Yeni bir kullanıcı oluşturduktan sonra, bu komutla MySQL’e girebilir ve bir karşılama mesajı ile ardından mysql> istemini görürsünüz:

> mysql -u username -p 
Welcome to the MySQL monitor.  Commands end with; or \g.
Your MySQL connection id is 25
Server version: 8.1.0 MySQL Community Server - GPL

Copyright (c) 2000, 2023, Oracle and/or its affiliates.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
Owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql>

MySQL Veritabanı Nasıl Oluşturulur

Veritabanı Oluşturma

Artık MySQL’de ilk veritabanınızı oluşturma zamanı. Bu eğitim için, bazı DataCamp kursları hakkında bilgi içerecek “datacamp_courses” adlı bir veritabanı oluşturmak istiyoruz. Veritabanı yerel olarak barındırılacaktır.

Bir veritabanı oluşturmak için şu komutu kullanın:

mysql> CREATE DATABASE datacamp_courses;

Veritabanının oluşturulduğunu kontrol etmek için aşağıdakini yazın; kullanılabilir tüm veritabanlarını içeren bir tablo görüntülenecektir:

mysql> SHOW databases;
+--------------------+
| Database           |
+--------------------+
| datacamp_courses   |
| mysql              |
+--------------------+
5 rows in set (0,00 sec)

Artık yepyeni veritabanınıza erişmeye hazırsınız.

mysql> USE datacamp_courses;
Database changed

Tablo Oluşturma

Şimdiye kadar ilk veritabanınızı oluşturdunuz. Ancak henüz boş. Şimdi veritabanının ilk tablosunu oluşturacağız. DataCamp kurs kataloğunda bulunan çeşitli kurslar hakkında bilgi içeren ‘courses’ adlı bir tablo oluşturmak istiyoruz.

“datacamp_courses” veritabanında ilk tablonuzu oluşturma zamanı. DataCamp Kurs Kataloğu’ndaki bazı kurslar hakkında bilgi içeren bir tablo oluşturmak istiyoruz.

Tablonun birincil anahtarı course_id olmalıdır (yalnızca bu kısım kalın olarak belirtilmiştir) ve veri türü tamsayı olmalıdır. Birincil anahtar, sütun değerlerinin boş (NULL) ve yinelenen olmasını engelleyen bir kısıtlamadır. Tabloda yer alan belirli bir kaydı ya da bir kayıtlar kümesini benzersiz şekilde tanımlamanızı sağlar.

Diğer sütunlar; kurs adı, eğitmen adı, kursun teknolojisi, konusu ve url hakkında bilgi sağlar.

“datatacamp_courses” veritabanının ilk tablosunu oluşturmak için aşağıdaki komutu kullanın:

mysql> CREATE TABLE courses (
  course_id int NOT NULL,
  course_name varchar(250) NOT NULL,
  instructor_name varchar(250) NOT NULL,
  technology varchar(50) NOT NULL,
  topic varchar(50) NOT NULL,
  PRIMARY KEY (course_id)
);

Temel SQL Sorguları

Artık ilk veritabanınız ve ilk tablonuz var. Harika! Şimdi tabloya biraz veri ekleme zamanı.

Katalogumuzda bulunan bazı popüler kursları INSERT deyimiyle birkaç satır olarak ekleyelim. Aşağıdaki kod sihrini gerçekleştirecek.

INSERT INTO 
    courses (course_id, course_name, instructor_name, technology, topic) VALUES 
    (1, 'Introduction to SQL', 'Izzy Weber', 'SQL','Data Manipulation'), 
    (2, 'Database Design', 'Lis Sulmont', 'SQL', 'Data Engineering'), 
    (3, 'Data Manipulation with pandas', 'Richie Cotton', 'R','Programming'),
    (4, 'Generative AI Concepts', 'Daniel Tedesco', 'Theory', 'AI & Machine Learning');

Satırların doğru eklendiğini kontrol etmek için SELECT deyimiyle tablodaki tüm satırları görüntüleyelim:

SELECT * FROM courses;
+-----------+-------------------------------+-----------------+------------+-----------------------+
| course_id | course_name                   | instructor_name | technology | topic                 |
+-----------+-------------------------------+-----------------+------------+-----------------------+
|         1 | Introduction to SQL           | Izzy Weber      | SQL        | Data Manipulation     |
|         2 | Database Design               | Lis Sulmont     | SQL        | Data Engineering      |
|         3 | Data Manipulation with pandas | Richie Cotton   | R          | Programming           |
|         4 | Generative AI Concepts        | Daniel Tedesco  | Theory     | AI & Machine Learning |
+-----------+-------------------------------+-----------------+------------+-----------------------+
4 rows in set (0,00 sec)

Az önce eklediğimiz veride bir hata olduğunu fark etmiş olabilirsiniz. Data Manipulation with pandas kursunun teknolojisi R değil, Python’dır. Hadi, güncellenecek satırı belirtmek için WHERE koşuluyla birlikte UPDATE deyimiyle hatayı düzeltelim.

UPDATE courses SET technology = 'Python' WHERE course_id = 3;
SELECT * FROM courses;
+-----------+-------------------------------+-----------------+------------+-----------------------+
| course_id | course_name                   | instructor_name | technology | topic                 |
+-----------+-------------------------------+-----------------+------------+-----------------------+
|         1 | Introduction to SQL           | Izzy Weber      | SQL        | Data Manipulation     |
|         2 | Database Design               | Lis Sulmont     | SQL        | Data Engineering      |
|         3 | Data Manipulation with pandas | Richie Cotton   | Python     | Programming           |
|         4 | Generative AI Concepts        | Daniel Tedesco  | Theory     | AI & Machine Learning |
+-----------+-------------------------------+-----------------+------------+-----------------------+
4 rows in set (0,00 sec)

Son olarak, tablonuzdaki kayıtlardan birini silmek isteyebilirsiniz. Örneğin, Generative AI Concepts kursunu silelim:

DELETE from courses WHERE course_name = 'Generative AI Concepts';
SELECT * FROM courses;
+-----------+-------------------------------+-----------------+------------+-------------------+
| course_id | course_name                   | instructor_name | technology | topic             |
+-----------+-------------------------------+-----------------+------------+-------------------+
|         1 | Introduction to SQL           | Izzy Weber      | SQL        | Data Manipulation |
|         2 | Database Design               | Lis Sulmont     | SQL        | Data Engineering  |
|         3 | Data Manipulation with pandas | Richie Cotton   | Python     | Programming       |
+-----------+-------------------------------+-----------------+------------+-------------------+
3 rows in set (0,00 sec)

İleri Düzey Konular

Indeksleme

Varsayılan olarak, MySQL bazı satırları bulmak zorunda kaldığında ilk satırdan başlar ve baştan sona okur. Veritabanlarınız milyonlarca satıra sahipse bu davranış sorunlu olabilir; süreç oldukça yavaşlayabilir.

MySQL’in tablolardaki satırları aramasını hızlandırmanın harika bir yolu indeks oluşturmaktır. İndeks, tablolarınızdaki belirli sütunlara göre satırları daha hızlı getirmek için MySQL’in kullandığı bir bileşendir.

Kurs tablomuzda “course_id” sütunu üzerinde “idx_course” adlı bir indeks oluşturalım.

CREATE INDEX idx_course
ON courses (course_id);

Join’lar

Şu ana kadar yalnızca course tablosu ile çalıştık. Ancak MySQL gibi ilişkisel veritabanlarının tam potansiyelinden, birden fazla tabloyla aynı anda çalıştığınızda yararlanmaya başlarsınız.

Birden fazla tabloyu birleştirmenin sihirli aracı JOIN işlemidir. Veritabanımızda, DataCamp kurs eğitmenleri hakkında temel bilgiler içeren ‘instructors” adlı ikinci bir tablo olduğunu hayal edin. Aşağıdaki betik tabloyu oluşturur ve bazı (kurgu) satırlar ekler:

mysql> CREATE TABLE instructors (
  instructor_id int NOT NULL,
  instructor_name varchar(250) NOT NULL,
  role varchar(500) NOT NULL,
  number_courses int NOT NULL,
  PRIMARY KEY (instructor_id)
);
INSERT INTO 
    instructors (instructor_id, instructor_name, role, number_courses) VALUES 
    (1, 'Lis Sulmont', 'Data Scientist', 4),
    (2, 'Daniel Tedesco', 'Business Analyst', 1),
    (3, 'Richie Cotton', 'Data Evangelist',5),
    (4, 'Izzy Weber', 'Data Engineer', 2), 
    (5, 'James Chapman', 'Data Analyst',3);

İki tabloyu birleştirerek kursların bilgilerini ve eğitmenle ilişkili verileri birlikte almak istediğinizi düşünün. Yalnızca course tablosunda yer alan kursların bilgisini almak için INNER JOIN kullanacağız. Join için ortak sütun “instructor_name”dir.

mysql> SELECT * FROM courses
    -> INNER JOIN instructors
    -> ON courses.instructor_name = instructors.instructor_name;
+-----------+-------------------------------+-----------------+------------+-------------------+---------------+-----------------+-----------------+----------------+
| course_id | course_name                   | instructor_name | technology | topic             | instructor_id | instructor_name | role            | number_courses |
+-----------+-------------------------------+-----------------+------------+-------------------+---------------+-----------------+-----------------+----------------+
|         2 | Database Design               | Lis Sulmont     | SQL        | Data Engineering  |             1 | Lis Sulmont     | Data Scientist  |              4 |
|         3 | Data Manipulation with pandas | Richie Cotton   | Python     | Programming       |             3 | Richie Cotton   | Data Evangelist |              5 |
|         1 | Introduction to SQL           | Izzy Weber      | SQL        | Data Manipulation |             4 | Izzy Weber      | Data Engineer   |              2 |
+-----------+-------------------------------+-----------------+------------+-------------------+---------------+-----------------+-----------------+----------------+
3 rows in set (0,00 sec)

Bu yalnızca bir join türüdür; kullanım durumunuza bağlı olarak aynı derecede yararlı olan başka türler de vardır. Başlamak için SQL’de Verileri Birleştirme Kursumuz ve JOIN’ler için kısa yol sayfamıza göz atabilirsiniz.

MySQL En İyi Uygulamaları

Güvenlik Önlemleri

Modern veritabanları milyonlarca satırlık tabloları saklayabilir. Bu kadar çok veri ve ona dayalı uygulama varken, bu verileri güvence altına almak hayati önem taşır.

Veritabanları; erişim yönetimindeki hatalar, zayıf parolalar ve SQL enjeksiyonları gibi yaygın risklere maruz kalır. Bu tehdit ve zayıflıkları gidermek için; kullanıcıya göre erişim ayrıcalıklarını yapılandırma, SQL sunucularında tetikleyiciler oluşturma ve şifreleme yöntemleri uygulama gibi çeşitli strateji ve önlemler hayata geçirilebilir. SQL güvenliğine başlamak için harika bir yer: Database Design Kursumuz.

Performans Optimizasyonu

SQL yolculuğunuzda ilerledikçe, performansın önemini fark etmeye başlayacaksınız. Bir SQL sorgusu farklı şekillerde yazılabilir. Hepsi çalışır; ancak bazıları diğerlerinden daha verimlidir.

Alt sorgular ve WHERE, HAVING, DISTINCT gibi SQL ifadeleri dâhil olmak üzere SQL kodunuzun performansını artırmanıza yardımcı olabilecek birçok strateji ve püf noktası vardır.

Ancak verimlilik yalnızca teknik bir mesele değildir; aynı zamanda düzen ve okunabilirlik meselesidir. SQL yazımınızda takma adlar (alias) ve yorumlar kullanmak gibi küçük değişikliklerle; size ve ekibinizin geri kalanına yardımcı olacak büyük farklar yaratabilirsiniz.

SQL performans optimizasyonu hakkında daha fazla bilgi edinmek ister misiniz? SQL Server’da Sorgu Performansını İyileştirme Kursumuza göz atın

Sonuç

Bu MySQL eğitimini sonuna kadar getirdiğiniz için tebrikler. MySQL’e ve yeteneklerine bu girişten keyif aldığınızı umuyoruz. Veritabanı yönetimiyle ilgileniyorsanız MySQL öğrenmek akıllıca bir adımdır.

Ancak bu, yolculuğunuzun yalnızca başlangıcı. MySQL ve genel olarak SQL hakkında daha fazla bilgi edinmek isterseniz, Datacamp sizin için burada. Başlamak için bazı kaynaklar:


Javier Canales Luna's photo
Author
Javier Canales Luna
LinkedIn

Serbest çalışan bir veri analistiyim; dünya genelinde şirketler ve kuruluşlarla veri bilimi projelerinde iş birliği yapıyorum. Ayrıca 2+ yıllık deneyime sahip bir veri bilimi eğitmeniyim. Düzenli olarak İngilizce ve İspanyolca veri bilimiyle ilgili makaleler yazıyorum; bunların bir kısmı DataCamp, Towards Data Science ve Analytics Vidhya gibi köklü internet sitelerinde yayımlandı. Siyaset bilimi ve hukuk geçmişine sahip bir veri bilimci olarak amacım, kamu politikası, hukuk ve teknolojinin kesişiminde çalışmak; fikirlerin gücünden yararlanarak özellikle iklim krizi olmak üzere acil sorunların üstesinden gelmemize yardımcı olabilecek yenilikçi çözümler ve anlatılar geliştirmek. Kendimi otodidakt bir kişi, sürekli öğrenen ve disiplinlerarasılığın güçlü bir savunucusu olarak görüyorum. Yeni şeyler öğrenmek için asla geç değildir.

Konular
SQL

SQL Yolculuğunuza Bugün Başlayın!

Kurs

SQL’e Giriş

2 sa
1.6M
Sadece iki saat içinde SQL kullanarak ilişkisel veritabanlarını nasıl oluşturacağınızı ve sorgulayacağınızı öğrenin.
Ayrıntıları GörüntüleRight Arrow
Kursa Başla
Devamını GörRight Arrow
İlgili

blog

2026’da En Popüler 40 Yazılım Mühendisi Mülakat Sorusu

Algoritmalar, sistem tasarımı ve davranışsal senaryoları kapsayan bu temel sorularla teknik mülakat sürecine hakim olun. Uzman cevapları, kod örnekleri ve kanıtlanmış hazırlık stratejileri edinin.
Dario Radečić's photo

Dario Radečić

15 dk.

blog

Hızlı Sevkiyat İçin Pratik Vibe Kodlama Teknoloji Yığını

Ön uç, arka uç, veritabanları, kimlik doğrulama, depolama, e-posta, test, dağıtım ve izleme için en iyi araçları keşfedin.
Abid Ali Awan's photo

Abid Ali Awan

14 dk.

Eğitim

.gitignore Nasıl Kullanılır: Örneklerle Pratik Bir Giriş

Git deponuzu temiz tutmak için .gitignore’u nasıl kullanacağınızı öğrenin. Bu eğitim; temelleri, yaygın kullanım durumlarını ve başlamanıza yardımcı olacak pratik örnekleri kapsar!
Kurtis Pykes 's photo

Kurtis Pykes

8 dk.

Eğitim

Python'da Listeyi String'e Nasıl Dönüştürürsünüz

Bu hızlı eğitimde, Python'da bir listeyi string'e nasıl dönüştüreceğinizi öğrenin.
Adel Nehme's photo

Adel Nehme

Devamını GörDevamını Gör