Konuyu Oyla:
  • Derecelendirme: 5/5 - 1 oy
  • 1
  • 2
  • 3
  • 4
  • 5
Önermiyorum - 9 (MySQL'de ALTER komutunun olmaması)
#1
MySQL'de ALTER komutunun olmaması (stored procedure'ler için) bence hiç de iyi değil. Sürekli olarak, DROP/CREATE ikilisini kullanıyoruz.

Bir de dikkat etmeniz gereken bir durum var. Diyelim ki tablonuzda iki VARCHAR türlü alan var ve siz SELECT ederken bu alanları yanyana görebileceğiniz yeni bir sanal alan oluşturmak istiyorsunuz:

  SELECT
    B.Alan1,
    B.Alan2,
    B.Alan1 + '-' + B.Alan2 AS BenimYeniAlanim
  FROM BenimTablom B;

Bu durumda hepimizin beklentisi Alan1 ve Alan2 'nin toplamı yani iki string ifadenin yanyana gelmesinden oluşan yeni string'in BenimYeniAlanim isimli alanda görüntülenmesi. Öyle değil mi ? Ancak dikkat edin, MySQL iki string ifadenin + simgesi ile toplamını sizin için DOUBLE'a çevirecek. Neden böyle bir şey yapar ? Neden her dilde olan string toplama MySQL'de çalışmaz ? MySQL'i yazan coder'ların kafası mı güzeldi ? Bunlar bilinmez, ama ben size yapması gereken işlevselliği sunan CONCAT fonksiyonunu önermek zorunda kalıyorum.
Mal sahibi, mülk sahibi
Hani bunun ilk sahibi ?
Mal da yalan mülk de yalan
Var biraz da sen oyalan...
WWW
Cevapla
#2
Bence concat kullanmak daha sağlıklı forumlarda da şöyle bir bilgi var. Bu durum PostgreSQL içinde geçerli.
Eğer birleştirilecek parçalardan birisi null değeri almışsa + veya || operatörleri ile birleştirme sonucunda null değeri geliyor.
Fakat concat ile yaparsanız null bilgiyi emtpy string e çevirip diğer bilgileri birleştirip sonucu veriyor. Ayrıca concat için daha performanslı diyor.
select ' ali ' || ' veli ' || null;
select null || ' ali ' || ' veli ';
Bunların sonucu null veriyorken.
select concat(null, ' ali ', ' veli ');
Sonuç " ali  veli " şeklinde dönüyor.
Linkleri Görebilmeniz İçin Üye Olmanız Gerekiyor. Üye Olabilmek İçin Lütfen Buraya Tıklayınız.
PostgreSQL - Linux - Delphi, Linkleri Görebilmeniz İçin Üye Olmanız Gerekiyor. Üye Olabilmek İçin Lütfen Buraya Tıklayınız.
WWW
Cevapla
#3
Üstad, yeteneksizliği özellik olarak göstermeyelim lütfen. Diğer tüm dillerde + ile string birleştirme yapılabiliyor. Bunda da yapılabilmeli idi. NULL ile neyi toplarsanız toplayın elbette NULL değerini vermelidir. Bu gayet doğal bir durum. Alan Nullable ise kullanıcı kendi kontrolünü kendisi yapar bu durumda. (IFNULL, ISNULL vb.)

String alanların toplanmasından sonra ortaya çıkan alanın DOUBLE olması da neyin nesi !!

Not: Bir dil önce standartları karşılamalı, daha sonra kendisine has özelliklere yer vermelidir.
Mal sahibi, mülk sahibi
Hani bunun ilk sahibi ?
Mal da yalan mülk de yalan
Var biraz da sen oyalan...
WWW
Cevapla
#4
(15-01-2019, Saat: 12:30)Tuğrul HELVACI Adlı Kullanıcıdan Alıntı: Linkleri Görebilmeniz İçin Üye Olmanız Gerekiyor. Üye Olabilmek İçin Lütfen Buraya Tıklayınız.String alanların toplanmasından sonra ortaya çıkan alanın DOUBLE olması da neyin nesi !!

Bu konuda sonuna kadar haklısınız. Ya hata çıkar yada string sonuç getir. Double da nedir
PostgreSQL - Linux - Delphi, Linkleri Görebilmeniz İçin Üye Olmanız Gerekiyor. Üye Olabilmek İçin Lütfen Buraya Tıklayınız.
WWW
Cevapla
#5
Uğur bey'in MariaDB'deki denemesini bekleyelim. Bakalım MariaDB'de durum ne ahvalde ?
Mal sahibi, mülk sahibi
Hani bunun ilk sahibi ?
Mal da yalan mülk de yalan
Var biraz da sen oyalan...
WWW
Cevapla
#6
Maalesef, MariaDB'de de durum aynı.
P.Safa:Yaşlanarak değil, yaşayarak tecrübe kazanılır.Zaman insanları değil,armutları olgunlaştırır
C.Yücel:Toprak gibi olmalısın! Ezildikçe sertleşmelisin!Seni ezenler sana muhtaç kalmalı! Hayatı sende bulmalı
S.Canan:Bildiğini zannettiğin an hiç bir şey öğrenemezsin
Bilgi uçar
WWW
Cevapla
#7
(15-01-2019, Saat: 13:43)uparlayan Adlı Kullanıcıdan Alıntı: Linkleri Görebilmeniz İçin Üye Olmanız Gerekiyor. Üye Olabilmek İçin Lütfen Buraya Tıklayınız.Maalesef, MariaDB'de de durum aynı.

Teşekkür ederim.
Mal sahibi, mülk sahibi
Hani bunun ilk sahibi ?
Mal da yalan mülk de yalan
Var biraz da sen oyalan...
WWW
Cevapla
#8
Merhaba,
Tekrar teşekkürler @Tuğrul HELVACI hocam.
PostgreSQL'de bir trigger ile ad soyad alanını aşağıdaki gibi birleştiriyorum. Herhangi bir sorunla karşılaşmadım. 
new."ad_soyad" = new."ad" || ' ' || new."soyad";
While true do; Hayat döngüsü, kısır değildir! Yapılan bir yanlış, o döngünün dışına çıkmanızı sağlayacaktır.
WWW
Cevapla
#9
Double mı yok artık Smile
Yalnızım ama bir kente yürüyen ordu gibiyim, edebiyattan kaçınmalıyım..
Cevapla
#10
Abi burda ne demek istedin ?

-MySQL'de ALTER komutunun olmaması bence hiç de iyi değil-
Linkleri Görebilmeniz İçin Üye Olmanız Gerekiyor. Üye Olabilmek İçin Lütfen Buraya Tıklayınız.
WWW
Cevapla


Konu ile Alakalı Benzer Konular
Konular Yazar Yorumlar Okunma Son Yorum
  [ÇÖZÜLDÜ] SQLite'dan MySQL'e Aktarma ? Mr.Developer 3 307 22-07-2019, Saat: 20:31
Son Yorum: Mr.Developer
  (ÇÖZÜLDÜ] MySQL Date_format komutu wiseman 1 264 30-05-2019, Saat: 11:30
Son Yorum: wiseman
  MySQL Drop database Yetkisi yhackup 2 468 22-03-2019, Saat: 11:21
Son Yorum: yhackup
  MySQL Workbench Kod Tamamlama Hatası - (Code Completion) hi_selamlar 0 337 23-02-2019, Saat: 11:42
Son Yorum: hi_selamlar
  MySQL malformed trail byte or out of range char yhackup 5 697 31-01-2019, Saat: 09:55
Son Yorum: hi_selamlar



Konuyu Okuyanlar: 1 Ziyaretçi