Giriş
Tablolar, SQL veritabanlarındaki birincil organizasyon yapısıdır. Tablodaki her bir satırın veya kaydın ayrı özelliklerini yansıtan bir dizi sütun içerirler. Veri organizasyonunun böylesine temel bir yönü olarak, ilişkisel veritabanlarıyla çalışan herkesin gerektiğinde tabloların nasıl oluşturulacağını, değiştirileceğini ve silineceğini anlaması önemlidir.
Bu kılavuzda, SQL'de tabloların nasıl oluşturulacağının yanı sıra mevcut tabloların nasıl değiştirilip silineceğini ele alacağız.
Önkoşullar
Bu kılavuzu takip etmek için, SQL kullanan bir tür ilişkisel veritabanı yönetim sistemi (RDBMS) çalıştıran bir bilgisayara ihtiyacınız olacak. Bu kılavuzdaki talimatlar ve örnekler aşağıdaki ortam kullanılarak doğrulanmıştır:
- Ubuntu 20.04 çalıştıran bir sunucu.
- MySQL
Ayrıca, joker karakter kullanarak alıştırma yapabileceğiniz bazı örnek verilerle yüklenmiş bir veritabanına ve tabloya ihtiyacınız olacak. Bunlara sahip değilseniz, aşağıdaki MySQL'e Bağlanma ve Örnek Veritabanı Kurma bölümünü okuyarak, bu kılavuzun örneklerde kullanacağı bir veritabanı ve tablonun nasıl oluşturulacağına ilişkin ayrıntılar için okuyabilirsiniz .
MySQL'e Bağlanma ve Örnek Bir Veritabanı Kurma
SQL veritabanı sisteminiz uzak bir sunucuda çalışıyorsa, yerel makinenizden sunucunuza SSH uygulayın:
ssh sammy@your_server_ip
Ardından sammy
ile MySQL kullanıcı hesabınızın adıyla değiştirerek MySQL sunucu istemini açın :
mysql -u sammy -p
Şu adda bir veritabanı oluşturun tablesDB
:
CREATE DATABASE tablesDB;
Veritabanı başarıyla oluşturulduysa, aşağıdaki gibi çıktılar alırsınız:
Output
Query OK, 1 row affected (0.01 sec)
tablesDB
Veritabanını seçmek için aşağıdaki gibi USE
ifadeyi çalıştırın :
USE tablesDB;
Output
Database changed
Bununla, kılavuzun geri kalanını takip etmeye ve SQL'de tabloların nasıl oluşturulup yönetileceğini öğrenmeye hazırsınız.
Tablolar Oluşturma
SQL'de bir tablo oluşturmak için, CREATE TABLE
komutu ve ardından tablo için istediğiniz adı kullanın:
CREATE TABLE table_name;
Her SQL deyiminde olduğu gibi, CREATE TABLE
ifadelerin noktalı virgül ( ;
) ile bitmesi gerektiğini unutmayın .
Bu örnek sözdizimi, sütun içermeyen boş bir tablo oluşturacaktır. Sütunlu bir tablo oluşturmak için, sütun adları ve bunlara karşılık gelen veri türleri ve kısıtlamalarının bir listesiyle, parantez içinde parantez içine alınmış ve virgülle ayrılmış tablo adını izleyin:
CREATE TABLE table_name (
column1_name column1_data_type,
column2_name column2_data_type,
. . .
columnN_name columnN_data_type
);
Örnek olarak, İstanbul'daki en sevdiğiniz parklar hakkında bazı bilgileri kaydetmek için bir tablo oluşturmak istediğinizi varsayalım. Her parkla ilgili hangi nitelikleri kaydetmek istediğinize karar verdikten sonra, bu özelliklerin her biri için sütun adlarına ve her biri için uygun veri türüne karar verirsiniz:
- parkName : Her parkın adı. Park adlarının uzunluğunda büyük bir fark vardır, bu nedenle
varchar
maksimum30
karakter uzunluğuna sahip veri türü uygun olacaktır. - yearBuilt: Parkın inşa edildiği yıl. MySQL sahip olmasına rağmen
year
veri türünü, bu sadece değerleri verir1901
etmek2155
. Mesela İstanbul'da, 1901'den önce inşa edilmiş birkaç parka sahiptir, bu nedenle bunun yerineint
veri türünü kullanabilirsiniz . - firstVisit: Her parkı ilk ziyaretinizin tarihi. MySQL,
date
bu sütun için kullanabileceğiniz veri türüne sahiptir. Verileri biçiminde depolarYYYY-MM-DD
. - lastVisit: Her parka yaptığınız en son ziyaretinizin tarihi. Yine, bunun için
date
türü kullanabilirsiniz .
faveParks
Bu adlara ve veri türlerine sahip sütunlarla adlandırılmış bir tablo oluşturmak için aşağıdaki komutu çalıştırmanız gerekir:
CREATE TABLE faveParks (
parkName varchar(30),
yearBuilt int,
firstVisit date,
lastVisit date
);
//Output
Query OK, 0 rows affected (0.01 sec)
Tabloya herhangi bir veri eklemediğiniz için bunun yalnızca tablonun yapısını oluşturduğunu unutmayın.
Ayrıca CREATE TABLE AS sözdizimi ile mevcut tablolardan yeni tablolar oluşturabilirsiniz :
CREATE TABLE new_table_name AS (
SELECT column1, column2, . . . columnN
FROM old_table_name
);
Yeni tablonun adını bir sütun listesi ve veri türleriyle takip etmek yerine, onu takip edin AS
ve ardından parantez içinde, SELECT
orijinal tablodan yeni tabloya kopyalamak istediğiniz sütunları ve verileri döndüren bir ifade .
Orijinal tablonun sütunlarında herhangi bir veri varsa, tüm bu verilerin yeni tabloya da kopyalanacağını unutmayın. Ayrıca, netlik açısından, bu örnek sözdizimi SELECT
yalnızca gerekli FROM
tümceye sahip bir sorgu içerir . Ancak, herhangi bir geçerli SELECT
ifade bu yerde çalışacaktır.
Örnek olarak, aşağıdaki komut, daha önce oluşturulan tablodaki parkInfo
iki sütundan bir faveParks
tablo oluşturur:
CREATE TABLE parkInfo AS (
SELECT parkName, yearBuilt
FROM faveParks
);
//Output
Query OK, 0 rows affected (0.02 sec)
Records: 0 Duplicates: 0 Warnings: 0
faveParks
Tabloda herhangi bir veri olsaydı, tabloya parkName
ve yearBuilt
sütunlarına ait veriler de parkInfo
tabloya kopyalanırdı , ancak bu durumda her iki tablo da boş olacaktır.
Mevcut bir tablonun adını kullanarak bir tablo oluşturmaya çalışırsanız, bir hataya neden olur:
CREATE TABLE parkInfo (
name varchar(30),
squareFootage int,
designer varchar(30)
);
//Output
ERROR 1050 (42S01): Table 'parkInfo' already exists
Bu hatayı önlemek için, IF NOT EXISTS
seçeneği CREATE TABLE
komutunuza ekleyebilirsiniz . Bu, veritabanına belirtilen ada sahip bir veritabanının zaten mevcut olup olmadığını kontrol etmesini ve varsa, hata yerine bir uyarı vermesini söyleyecektir:
CREATE TABLE IF NOT EXISTS parkInfo (
name varchar(30),
squareFootage int,
designer varchar(30)
);
//Output
Query OK, 0 rows affected, 1 warning (0.00 sec)
Bu komut, adı verilen tablo parkInfo
hala mevcut olduğundan, yeni bir tablo oluşturmada başarısız olacaktır . Yine de, bu çıktının CREATE TABLE
ifadenin bir uyarıya yol açtığını gösterdiğine dikkat edin . Uyarı mesajını görüntülemek için teşhis SHOW WARNINGS
ifadesini çalıştırın:
SHOW WARNINGS;
//Output
| Level | Code | Message |
+-------+------+---------------------------------+
| Note | 1050 | Table 'parkInfo' already exists |
+-------+------+---------------------------------+
1 row in set (0.00 sec)
Bu çıktının da gösterdiği gibi, daha önce aldığınız aynı hata, IF NOT EXISTS
seçeneği dahil ettiğiniz için bir uyarı olarak kaydedilmiştir . Bu, işlemlerin çalıştırılması gibi belirli durumlarda yararlı olabilir; bir hata, tüm işlemin başarısız olmasına neden olurken, bir uyarı yalnızca buna neden olan ifadenin başarısız olacağı anlamına gelir.
Şimdilik nu kadar arkadaşlar bir sonraki makalemde Tablo değiştirme ve silme işlemlerini anlatmayı planlıyorum. Takipte kalın...