MYSQL – DEĞİŞTİR, BIRAK, YENİDEN ADLANDIR, DEĞİŞTİR
⚡ Akıllı Özet
ALTER, DROP, RENAME ve MODIFY komutları şunlardır: MySQL Veritabanı kullanımdayken onu yeniden şekillendiren komutlardır. Bu komutlar, halihazırda depolanmış satırları silmeden tablolar ve sütunlar gibi nesneleri ekler, kaldırır, yeniden adlandırır ve yeniden tanımlar.

ALTER komutu nedir? MySQL?
MKS alter Bu komut, bir veritabanının yaşam döngüsü sırasında değiştirilmesi gereken mevcut bir veritabanını, tabloyu, görünümü veya diğer veritabanı nesnesini değiştirir. Bir şemanın oluşturulduktan ve verilerle doldurulduktan sonra gelişmesine olanak tanıyan komuttur.
İş gereksinimleri nadiren sabit kalır ve veritabanı tasarımı da bunlarla birlikte gelişmelidir. Diyelim ki Myflix veritabanının tasarımı uygulandı ve kullanıcılar onunla çalışıyor; ancak o zaman ekip, hayati bilgilerin eksik bırakıldığını fark ediyor. Kimse mevcut satırları kaybetmek istemez; sadece yeni bilgileri onların yanına kaydetmek isterler.
ALTER komutu tam olarak bu durumu kapsar. Bir alanın veri türünü metinden sayıya değiştirebilir, bir alanı yeniden adlandırabilir veya bir tabloya tamamen yeni bir sütun ekleyebilir; tüm bunlar olurken tabloda zaten depolanmış olan veriler olduğu gibi kalır.
Komutun amacı belirlendikten sonraki adım, onu gerçekleştirecek söz dizimidir.
MySQL ALTER Sözdizimi
Mevcut bir tabloya sütun eklemek için kullanılan temel sözdizimi aşağıda gösterilmiştir.
ALTER TABLE `table_name` ADD COLUMN `column_name` `data_type`;
İŞTE
- “TABLOYU DEĞİŞTİR `tablo_adı`” bunu söyleyen komut MySQL 'tablo_adı' adlı tabloyu değiştirmek için sunucu.
- “SÜTUN `sütun_adı` `veri_türü` EKLE” bunu söyleyen komut MySQL Sunucuya `column_name` adında ve `data_type` veri türünde yeni bir sütun ekleniyor.
Diyelim ki Myflix çevrimiçi faturalama ve ödeme sistemini kullanıma sundu. Bunu desteklemek için, üye tablosuna kredi kartı numarası için bir alan eklenmesi gerekiyor. Herhangi bir değişiklik yapmadan önce, tablonun mevcut yapısına bakmakta fayda var. Aşağıda gösterilen kod bunu yapıyor.
SHOW COLUMNS FROM `members`;
| Alan | Menşei | Null | anahtar | Varsayılan | Extra |
|---|---|---|---|---|---|
| Üye numarası | int (11) | YOK HAYIR | PRI | NULL | otomatik artış |
| tam_adlar | varchar(350) | YOK HAYIR | NULL | ||
| cinsiyet | varchar(6) | EVET | NULL | ||
| doğum_tarihi | tarih | EVET | NULL | ||
| fiziksel adres | varchar(255) | EVET | NULL | ||
| posta_adresi | varchar(255) | EVET | NULL | ||
| iletişim_numarası | varchar(75) | EVET | NULL | ||
| E-posta | varchar(255) | EVET | NULL |
💡 int(11) ile ilgili not: Parantez içindeki sayı yalnızca ekran genişliğini belirtir. MySQL 8.0.17 sürümünde tamsayı türleri için bu özellik kullanımdan kaldırıldı, bu nedenle modern bir sunucu bu sütunu basitçe şu şekilde raporluyor: intDepolama boyutu değişmedi.
Aşağıda gösterilen kod, yeni alanı üyeler tablosuna ekler.
ALTER TABLE `members` ADD COLUMN `credit_card_number` VARCHAR(25);
Bu komut dosyasını myflixdb veritabanına uyguladığınızda, members tablosuna VARCHAR veri tipine sahip credit_card_number adında bir sütun eklenir. SHOW COLUMNS komut dosyasını tekrar çalıştırdığınızda aşağıdaki sonuç elde edilir.
| Alan | Menşei | Null | anahtar | Varsayılan | Extra |
|---|---|---|---|---|---|
| Üye numarası | int (11) | YOK HAYIR | PRI | NULL | otomatik artış |
| tam_adlar | varchar(350) | YOK HAYIR | NULL | ||
| cinsiyet | varchar(6) | EVET | NULL | ||
| doğum_tarihi | tarih | EVET | NULL | ||
| fiziksel adres | varchar(255) | EVET | NULL | ||
| posta_adresi | varchar(255) | EVET | NULL | ||
| iletişim_numarası | varchar(75) | EVET | NULL | ||
| E-posta | varchar(255) | EVET | NULL | ||
| Kredi Kartı Numarası | varchar(25) | EVET | NULL |
Vurgulanan satır, credit_card_number alanının üyeler tablosuna eklendiğini ve diğer sütunlarda zaten bulunan verilerin bu ekleme işleminden etkilenmediğini doğrular.
Bir sütun eklemek hikayenin sadece yarısıdır. Bir şemanın artık ihtiyaç duymadığı nesneleri de atması gerekir; bu da DROP komutunun görevidir.
DROP komutu nedir? MySQL?
DROP komutu bir nesneyi kalıcı olarak siler. Bu komut, nesneleri silmek için kullanılır.
- Veritabanını silin MySQL sunucu.
- Veritabanından tablo veya sütun gibi bir nesneyi silmek.
⚠️Uyarı: DROP işlemi geri alınamaz. Yedekleme yapılmadan ne nesne ne de içindeki satırlar kurtarılamaz, bu nedenle önce hedef üzerinde bir SELECT sorgusu çalıştırın ve yedeklemenin yapıldığını doğrulayın.
Damlaping Sütun
Yukarıdaki ALTER örneğinde, üyeler tablosuna credit_card_number adında bir sütun eklendi. Çevrimiçi faturalama özelliğinin ertelendiğini ve bu sütunun tekrar kaldırılması gerektiğini varsayalım. Aşağıdaki komut dosyası bunu yapar.
ALTER TABLE `members` DROP COLUMN `credit_card_number`;
Komut dosyasını çalıştırmak, üyeler tablosundan `credit_card_number` sütununu siler. Sütunları tekrar listelemek sonucu doğrular.
SHOW COLUMNS FROM `members`;
| Alan | Menşei | Null | anahtar | Varsayılan | Extra |
|---|---|---|---|---|---|
| Üye numarası | int (11) | YOK HAYIR | PRI | NULL | otomatik artış |
| tam_adlar | varchar(350) | YOK HAYIR | NULL | ||
| cinsiyet | varchar(6) | EVET | NULL | ||
| doğum_tarihi | tarih | EVET | NULL | ||
| fiziksel adres | varchar(255) | EVET | NULL | ||
| posta_adresi | varchar(255) | EVET | NULL | ||
| iletişim_numarası | varchar(75) | EVET | NULL | ||
| E-posta | varchar(255) | EVET | NULL |
Kredi kartı numarası alan listesinden kayboldu.
BIRAKMA TABLOSU
Bir veritabanından bir tablonun tamamını silmenin sözdizimi aşağıdaki gibidir.
DROP TABLE `sample_table`;
Bu ifade gerçek bir nesneye uygulandığında şöyle görünür.
DROP TABLE `categories_archive`;
Bu komutu çalıştırmak, `categories_archive` adlı tabloyu ve içindeki tüm satırları veritabanından siler.
VERİTABANI BIRAK
Aynı anahtar kelime tüm şemayı siler. IF EXISTS eklemek hatayı bastırır. MySQL Hedef zaten ortadan kalktığında hata verir; bu, birden fazla kez çalışan komut dosyaları içinde kullanışlıdır.
DROP DATABASE IF EXISTS `myflixdb_backup`;
Bir nesneyi silmek geri alınamaz. Nesnenin kendisi kalmalı ve yalnızca adı yanlışsa, RENAME komutu doğru araçtır.
RENAME komutu nedir? MySQL?
RENAME komutu, tablo veya sütun gibi mevcut bir veritabanı nesnesinin adını yeni bir adla değiştirir. Bir tablonun adını değiştirmek, tablonun içerdiği verilerin kaybolmasına neden olmaz.
Komutun temel sözdizimi aşağıdaki gibidir.
RENAME TABLE `current_table_name` TO `new_table_name`;
Film kiralama tablosunun adını movie_rentals olarak değiştirmek için aşağıdaki komut dosyası kullanılır.
RENAME TABLE `movierentals` TO `movie_rentals`;
Bu komutu çalıştırmak, `movierentals` tablosunun adını `movie_rentals` olarak değiştirir. Yeniden adlandırma yalnızca bir etiket değişikliği olduğundan, aynı ifadenin tersini çalıştırmak orijinal adı geri yükler.
RENAME TABLE `movie_rentals` TO `movierentals`;
RENAME TABLE komutu, bir tablonun adını değiştirir. Bir tablonun adını değiştirmek... sütunVe bu içeriği değiştirmek, CHANGE anahtar kelimesinin işidir.
DEĞİŞTİR Anahtar Kelime
CHANGE anahtar kelimesi size şunları sağlar:
- Bir sütunun adını değiştirin.
- Sütun veri türünü değiştirin
- Sütun kısıtlamalarını değiştirin
Bir örnek ele alalım. Aşağıdaki kodda da doğrulandığı gibi, members tablosundaki full_names alanı varchar veri tipinde ve 350 genişliğindedir.
SHOW COLUMNS FROM `members`;
| Alan | Menşei | Null | anahtar | Varsayılan | Extra |
|---|---|---|---|---|---|
| Üye numarası | int (11) | YOK HAYIR | PRI | NULL | otomatik artış |
| tam_adlar | varchar(350) | YOK HAYIR | NULL | ||
| cinsiyet | varchar(6) | EVET | NULL | ||
| doğum_tarihi | tarih | EVET | NULL | ||
| fiziksel adres | varchar(255) | EVET | NULL | ||
| posta_adresi | varchar(255) | EVET | NULL | ||
| iletişim_numarası | varchar(75) | EVET | NULL | ||
| E-posta | varchar(255) | EVET | NULL |
Diyelim ki gereksinim şu:
- Alan adını “full_names”ten “fullname”e değiştirin.
- Genişliği 250 olan char veri türüne dönüştürün.
- NOT NULL kısıtlaması ekleme
Her üç değişiklik de tek bir CHANGE ifadesiyle gerçekleştirilir.
ALTER TABLE `members` CHANGE COLUMN `full_names` `fullname` char(250) NOT NULL;
Bu komutu myflixdb üzerinde çalıştırdıktan sonra SHOW COLUMNS komutunu çalıştırdığımızda aşağıdaki sonuç elde edilir.
| Alan | Menşei | Null | anahtar | Varsayılan | Extra |
|---|---|---|---|---|---|
| Üye numarası | int (11) | YOK HAYIR | PRI | NULL | otomatik artış |
| Ad Soyad | kömür (250) | YOK HAYIR | NULL | ||
| cinsiyet | varchar(6) | EVET | NULL | ||
| doğum_tarihi | tarih | EVET | NULL | ||
| fiziksel adres | varchar(255) | EVET | NULL | ||
| posta_adresi | varchar(255) | EVET | NULL | ||
| iletişim_numarası | varchar(75) | EVET | NULL | ||
| E-posta | varchar(255) | EVET | NULL |
Sütun artık fullname olarak adlandırılıyor, char(250) karakter içeriyor ve NULL değerlerini reddediyor.
Anahtar Kelimeyi Değiştir
MODIFY anahtar kelimesi size şunları yapmanıza olanak tanır:
- Sütun veri türünü değiştirin.
- Sütun kısıtlamalarını değiştirin
Yukarıdaki DEĞİŞTİRME örneğinde, yeniden adlandırma işlemi amacın yalnızca bir parçası olmasına rağmen, alan adının iki kez girilmesi gerekiyordu. CHANGE ifadesinden alan adını çıkarmak hataya neden olur. Yalnızca veri türü ve kısıtlamaların ayarlanması gerektiğinde ve adın olduğu gibi kalması istendiğinde, MODIFY komutu sütun adını tek bir kez belirterek işlemi gerçekleştirir.
Aşağıdaki kod, "tam ad" alanının genişliğini 250'den 50'ye değiştirir.
ALTER TABLE `members` MODIFY `fullname` char(50) NOT NULL;
Bu komutu myflixdb üzerinde çalıştırdıktan sonra SHOW COLUMNS komutunu çalıştırdığınızda aşağıdaki sonuç elde edilir.
| Alan | Menşei | Null | anahtar | Varsayılan | Extra |
|---|---|---|---|---|---|
| Üye numarası | int (11) | YOK HAYIR | PRI | NULL | otomatik artış |
| Ad Soyad | kömür (50) | YOK HAYIR | NULL | ||
| cinsiyet | varchar(6) | EVET | NULL | ||
| doğum_tarihi | tarih | EVET | NULL | ||
| fiziksel adres | varchar(255) | EVET | NULL | ||
| posta_adresi | varchar(255) | EVET | NULL | ||
| iletişim_numarası | varchar(75) | EVET | NULL | ||
| E-posta | varchar(255) | EVET | NULL |
⚠️Uyarı: Bir sütunu daraltmak, artık sığmayan verileri kırpar. 50 karakterden uzun herhangi bir ad bu ifadeyle kısaltılır, bu nedenle mevcut en uzun değeri kontrol edin. SEÇİN Bir alanı küçültmeden önce sorgu.
DEĞİŞTİRME, DÜZENLEME VE SÜTUNU YENİDEN ADLANDIRMA
Bu üç anahtar kelime birbiriyle örtüşüyor ve yanlış olanı seçmek bu alandaki hataların en yaygın kaynağıdır. Aşağıdaki tabloda bunlar yan yana gösterilmiştir.
| Anahtar kelime | Sütunun adını değiştirir. | Türü ve kısıtlamaları değiştirir. | Eski isim gerekli | Tipik kullanım |
|---|---|---|---|---|
| DEĞİŞİM | Evet | Evet | Evet, ayrıca yeni isim de. | Tek bir ifadeyle yeniden adlandırın ve yeniden tanımlayın. |
| DEĞİŞTİRİN | Yok hayır | Evet | Bir kez verilen isim | Bir sütunu genişletin, daraltın veya yeniden yazın. |
| SÜTUNU YENİDEN ADLANDIR | Evet | Yok hayır | Evet, ayrıca yeni isim de. | Yalnızca yeniden adlandır, şuradan MySQL 8.0 ileri |
MySQL 8.0 sürümü, en basit durum için dördüncü bir seçenek ekledi: hiçbir yeniden tanımlama yapılmadan yeniden adlandırma.
ALTER TABLE `members` RENAME COLUMN `fullname` TO `full_name`;
Tür ve isim belirlendi. Geriye kalan soru, yeni sütunun tabloda nerede yer alacağıdır ve bu da AFTER anahtar kelimesiyle kontrol edilir.
SONRA Anahtar Kelime
Varsayılan olarak, ALTER TABLE komutuyla eklenen bir sütun tablonun sonuna eklenir. Bunun yerine belirli bir konuma yerleştirmek için, ALTER komutu AFTER anahtar kelimesiyle birlikte kullanılır.
Aşağıdaki kod, üyeler tablosunda "date_of_birth" alanının hemen ardından "date_of_registration" alanını ekler.
ALTER TABLE `members` ADD `date_of_registration` date NULL AFTER `date_of_birth`;
Bu komutu myflixdb üzerinde çalıştırdıktan sonra SHOW COLUMNS komutunu çalıştırdığınızda aşağıdaki sonuç elde edilir.
| Alan | Menşei | Null | anahtar | Varsayılan | Extra |
|---|---|---|---|---|---|
| Üye numarası | int (11) | YOK HAYIR | PRI | NULL | otomatik artış |
| Ad Soyad | kömür (50) | YOK HAYIR | NULL | ||
| cinsiyet | varchar(6) | EVET | NULL | ||
| doğum_tarihi | tarih | EVET | NULL | ||
| kayıt_tarihi | tarih | EVET | NULL | ||
| fiziksel adres | varchar(255) | EVET | NULL | ||
| posta_adresi | varchar(255) | EVET | NULL | ||
| iletişim_numarası | varchar(75) | EVET | NULL | ||
| E-posta | varchar(255) | EVET | NULL |
Vurgulanan satır, doğum tarihi sütunundan sonra eklenen sütundur. FIRST anahtar kelimesi de aynı şekilde çalışır ve yeni sütunu tablonun en başına taşır.
