{"id":209,"title":"SQL Notlar\u0131:  Tablo Olu\u015fturma ve Y\u00f6netimi","content":"<p>MySQL'de tablo olu\u015fturma, veritaban\u0131 y\u00f6netiminin temel ta\u015flar\u0131ndan biridir. Bu yaz\u0131da, MySQL'de tablo olu\u015fturma, birincil anahtar (Primary Key) ve yabanc\u0131 anahtar (Foreign Key) kullan\u0131m\u0131, tablo yap\u0131s\u0131n\u0131 g\u00f6r\u00fcnt\u00fcleme ve mevcut tablolar\u0131 klonlama gibi konular\u0131 ele alaca\u011f\u0131z.<\/p><p>#### 1. Tablo Olu\u015fturma ve Birincil Anahtar (Primary Key)<\/p><p>Birincil anahtar, bir tablodaki her sat\u0131r\u0131 benzersiz \u015fekilde tan\u0131mlayan bir s\u00fctun veya s\u00fctun grubudur. Birincil anahtar, `NOT NULL` olmal\u0131d\u0131r ve her tabloda yaln\u0131zca bir tane bulunabilir.<\/p><p>##### \u00d6rnek 1: Birincil Anahtar ile Tablo Olu\u015fturma<\/p><p>A\u015fa\u011f\u0131daki \u00f6rnekte, `PersonID` s\u00fctunu birincil anahtar olarak tan\u0131mlanm\u0131\u015ft\u0131r:<\/p><p>```sql<br>CREATE TABLE Person (<br>&nbsp; &nbsp;PersonID INT UNSIGNED NOT NULL,<br>&nbsp; &nbsp;LastName VARCHAR(66) NOT NULL,<br>&nbsp; &nbsp;FirstName VARCHAR(66),<br>&nbsp; &nbsp;Address VARCHAR(255),<br>&nbsp; &nbsp;City VARCHAR(66),<br>&nbsp; &nbsp;PRIMARY KEY (PersonID)<br>);<br>```<\/p><p>Bu \u00f6rnekte, `PersonID` s\u00fctunu, `Person` tablosundaki her sat\u0131r\u0131 benzersiz \u015fekilde tan\u0131mlar.<\/p><p>##### \u00d6rnek 2: Tek S\u00fctunlu Birincil Anahtar (Inline Tan\u0131m)<\/p><p>E\u011fer birincil anahtar tek bir s\u00fctundan olu\u015fuyorsa, `PRIMARY KEY` tan\u0131m\u0131n\u0131 s\u00fctun tan\u0131m\u0131yla birlikte yapabilirsiniz:<\/p><p>```sql<br>CREATE TABLE Person (<br>&nbsp; &nbsp;PersonID INT UNSIGNED NOT NULL PRIMARY KEY,<br>&nbsp; &nbsp;LastName VARCHAR(66) NOT NULL,<br>&nbsp; &nbsp;FirstName VARCHAR(66),<br>&nbsp; &nbsp;Address VARCHAR(255),<br>&nbsp; &nbsp;City VARCHAR(66)<br>);<br>```<\/p><p>Bu y\u00f6ntem, kodu daha k\u0131sa ve okunabilir hale getirir.<\/p><p>##### \u00d6rnek 3: \u00c7ok S\u00fctunlu Birincil Anahtar<\/p><p>Birincil anahtar, birden fazla s\u00fctundan olu\u015fabilir. Bu durumda, `PRIMARY KEY` tan\u0131m\u0131 ayr\u0131 bir sat\u0131rda yap\u0131lmal\u0131d\u0131r:<\/p><p>```sql<br>CREATE TABLE invoice_line_items (<br>&nbsp; &nbsp;LineNum SMALLINT UNSIGNED NOT NULL,<br>&nbsp; &nbsp;InvoiceNum INT UNSIGNED NOT NULL,<br>&nbsp; &nbsp;PRIMARY KEY (LineNum, InvoiceNum)<br>);<br>```<\/p><p>Bu \u00f6rnekte, `LineNum` ve `InvoiceNum` s\u00fctunlar\u0131 birlikte birincil anahtar olarak tan\u0131mlanm\u0131\u015ft\u0131r.<\/p><p>#### 2. Yabanc\u0131 Anahtar (Foreign Key) ile Tablo Olu\u015fturma<\/p><p>Yabanc\u0131 anahtar, bir tablodaki s\u00fctunun ba\u015fka bir tablodaki birincil anahtara referans vermesini sa\u011flar. Bu, tablolar aras\u0131nda ili\u015fki kurmak i\u00e7in kullan\u0131l\u0131r.<\/p><p>##### \u00d6rnek: Yabanc\u0131 Anahtar ile Tablo Olu\u015fturma<\/p><p>A\u015fa\u011f\u0131daki \u00f6rnekte, `Account` tablosundaki `PersonID` s\u00fctunu, `Person` tablosundaki `PersonID` s\u00fctununa referans verir:<\/p><p>```sql<br>CREATE TABLE Account (<br>&nbsp; &nbsp;AccountID INT UNSIGNED NOT NULL,<br>&nbsp; &nbsp;AccountNo INT UNSIGNED NOT NULL,<br>&nbsp; &nbsp;PersonID INT UNSIGNED NOT NULL,<br>&nbsp; &nbsp;PRIMARY KEY (AccountID),<br>&nbsp; &nbsp;FOREIGN KEY (PersonID) REFERENCES Person(PersonID)<br>) ENGINE=InnoDB;<br>```<\/p><p>Bu \u00f6rnekte, `Account` tablosundaki her hesap, `Person` tablosundaki bir ki\u015fiye ba\u011fl\u0131d\u0131r.<\/p><p>#### 3. Tablo Yap\u0131s\u0131n\u0131 G\u00f6r\u00fcnt\u00fcleme<\/p><p>Olu\u015fturdu\u011funuz bir tablonun yap\u0131s\u0131n\u0131 g\u00f6r\u00fcnt\u00fclemek i\u00e7in `SHOW CREATE TABLE` veya `DESCRIBE` komutlar\u0131n\u0131 kullanabilirsiniz.<\/p><p>##### \u00d6rnek: Tablo Yap\u0131s\u0131n\u0131 G\u00f6r\u00fcnt\u00fcleme<\/p><p>```sql<br>SHOW CREATE TABLE child;<br>```<\/p><p>Bu komut, `child` tablosunun yap\u0131s\u0131n\u0131 ve olu\u015fturulma detaylar\u0131n\u0131 g\u00f6sterir.<\/p><p>Daha basit bir y\u00f6ntem olarak `DESCRIBE` komutunu da kullanabilirsiniz:<\/p><p>```sql<br>DESCRIBE Tab1;<br>```<\/p><p>Bu komut, `Tab1` tablosunun s\u00fctunlar\u0131n\u0131, veri tiplerini ve di\u011fer \u00f6zelliklerini listeler.<\/p><p>#### 4. Mevcut Bir Tabloyu Klonlama<\/p><p>Mevcut bir tablonun yap\u0131s\u0131n\u0131 veya verilerini kopyalayarak yeni bir tablo olu\u015fturabilirsiniz.<\/p><p>##### \u00d6rnek 1: Tablo Yap\u0131s\u0131n\u0131 Klonlama<\/p><p>```sql<br>CREATE TABLE ClonedPersons LIKE Persons;<br>```<\/p><p>Bu komut, `Persons` tablosunun yap\u0131s\u0131n\u0131 (s\u00fctunlar, indeksler vb.) kopyalayarak `ClonedPersons` ad\u0131nda yeni bir tablo olu\u015fturur.<\/p><p>##### \u00d6rnek 2: Tablo Verilerini Klonlama<\/p><p>```sql<br>CREATE TABLE ClonedPersons SELECT * FROM Persons;<br>```<\/p><p>Bu komut, `Persons` tablosundaki t\u00fcm verileri kopyalayarak `ClonedPersons` ad\u0131nda yeni bir tablo olu\u015fturur.<\/p><p>#### 5. Tablo Olu\u015fturma ve Zaman Damgas\u0131 (Timestamp)<\/p><p>Zaman damgas\u0131 s\u00fctunu, bir sat\u0131r\u0131n en son ne zaman g\u00fcncellendi\u011fini takip etmek i\u00e7in kullan\u0131labilir.<\/p><p>##### \u00d6rnek: Zaman Damgas\u0131 ile Tablo Olu\u015fturma<\/p><p>```sql<br>CREATE TABLE TestLastUpdate (<br>&nbsp; &nbsp;ID INT NULL,<br>&nbsp; &nbsp;Name VARCHAR(50) NULL,<br>&nbsp; &nbsp;Address VARCHAR(50) NULL,<br>&nbsp; &nbsp;LastUpdate TIMESTAMP NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP<br>) COMMENT='Last Update';<br>```<\/p><p>Bu \u00f6rnekte, `LastUpdate` s\u00fctunu, sat\u0131r her g\u00fcncellendi\u011finde otomatik olarak g\u00fcncel zaman\u0131 kaydeder.<\/p><p>#### Sonu\u00e7<\/p><p>MySQL'de tablo olu\u015fturma, birincil anahtar ve yabanc\u0131 anahtar kullan\u0131m\u0131, tablo yap\u0131s\u0131n\u0131 g\u00f6r\u00fcnt\u00fcleme ve tablo klonlama gibi i\u015flemler, veritaban\u0131 y\u00f6netiminde olduk\u00e7a \u00f6nemlidir. Bu ara\u00e7lar\u0131 etkili bir \u015fekilde kullanarak, veritaban\u0131 tasar\u0131m\u0131n\u0131z\u0131 daha verimli hale getirebilirsiniz. Bir sonraki yaz\u0131da g\u00f6r\u00fc\u015fmek \u00fczere!<\/p>","excerpt":"MySQL'de tablo olu\u015fturma, birincil anahtar ve yabanc\u0131 anahtar kullan\u0131m\u0131, tablo yap\u0131s\u0131n\u0131 g\u00f6r\u00fcnt\u00fcleme ve tablo klonlama gibi i\u015flemler, veritaban\u0131 y\u00f6netiminde olduk\u00e7a \u00f6nemlidir. Bu ara\u00e7lar\u0131 etkili bir \u015fekilde kullanarak, veritaban\u0131 tasar\u0131m\u0131n\u0131z\u0131 daha verimli hale getirebilirsiniz.","created_at":"2025-01-13 15:23:43","updated_at":"2026-09-06 17:14:17","category_id":9,"view_count":529,"reading_time":4,"status":"published","editor_choice":0,"is_editor_choice":0,"published_at":"2025-01-13 15:23:43","featured_image":"resimyok.jpg","slug":"sql-notlari-tablo-olusturma-ve-yonetimi","category_name":"Yaz\u0131l\u0131m","category_slug":"yazilim","category_color":"#ef4444"}