MySQL ve SQL Server arasındaki farklar [kapalı]


144

Tüm veritabanı ihtiyaçları için (hem işte hem de kişisel projeler için) kullanılan bir ASP.NET geliştiricisiyim Microsoft SQL Server.

Bazı kişisel projelerim için LAMP yığınını denemeyi düşünüyorum .

Arasındaki temel farklar nelerdir MySQLve SQL Server? Saklı yordamları kullanmak yaygın bir uygulama MySQLmıdır?

Anahtar konusunda bana yardımcı olacak herhangi bir tavsiye veya kaynak var mı?

Her ikisinde de tecrübesi olanlar için, eksik özellikler var MySQLmı?

Yanıtlar:


139

Dikkat etmeniz gereken bir şey, SQL Server ve MySQL'in SQL sözdizimini uygulama biçimindeki oldukça ciddi farklardır.

İşte farklı SQL uygulamalarının güzel bir karşılaştırması .

Örneğin, üst-n bölümüne bir göz atın. MySQL'de:

SELECT age
FROM person
ORDER BY age ASC
LIMIT 1 OFFSET 2

SQL Server'da (T-SQL):

SELECT TOP 3 WITH TIES *
FROM person
ORDER BY age ASC

27
ve kehanet de farklıdır: * arasından seçin (kişi sırasından önce
asc'ye

9
Sadece bununla koştum. Tüm farklılıkları okumak beni rahatsız ediyor. Temel bilgiler aynıdır (en azından anlama açısından), ancak ayrıntılar çok, çok farklıdır.
JasCav

21
belki aptal bir yorum ama neden 1 sql dil olamaz ?? .. farklı html var ?? ... öyleyse neden 1 sql değil.
greaterKing

4
@greaterKing HTML bir komite / konsorsiyum tarafından belirlenmiş bir yapı ve standarttır, SQL .. değil, sadece bir betik dilidir ve tek sahibi yorumlayıcının geliştiricisidir. Bir bakıma Javascript gibi, her tarayıcının kendi JS motoru ve senaryoyu yorumlama yolları var. Bu dili bir çeşit dayanışmaya getirme çabaları sadece toplumun baskısı ile gerçekleşti. Ama adam keşke hepsi sadece küçük farklılıklar ile son derece benzer olsaydı
RedactedProfile

2
T-SQL Transact-SQL çevirir;) SQL Server dili (T-SQL) içerir ama, GUI ile bir bütün olarak bir yazılım olduğu lokal vb ağ üzerinden istekleri işleme
Botond Bertalan

48

Burada birçok yorum gerçek yaşam ifadelerinden ziyade dini tartışmalara benziyor. Yıllardır hem MySQL hem de MSSQL ile çalışıyorum ve her ikisi de iyi ürünler. MySQL'i esas olarak üzerinde çalıştığınız ortama göre seçerdim. Çoğu açık kaynaklı proje MySQL kullanır, bu nedenle bu yöne giderseniz MySQL sizin seçiminizdir. Net ile bir şey geliştirirseniz, MSSQL'i seçerim, çünkü çok daha iyi değil, çünkü çoğu insanın kullandığı şey budur. Aslında şu anda MySQL ve C # ile ASP.NET kullanan bir proje üzerinde. Mükemmel çalışıyor.


3
Kesinlikle konuşmak gerekirse, MS SQL gibi bir şey olduğunu düşünmüyor musunuz? Var olan şey "MS SQL Server" dır.
Kırılmaz

Eminim benden daha fazlasını biliyorsun. Ben sadece bir acemiyim lütfen yanılmışsam haberim olur mu? MS SQL gibi kesin bir şey var mı?
Kırılmaz

2
Ne istediğinden emin değilim?
Remy

3
Bu doğru. Microsoft SQL Server 2012 veya hangi sürümü kullanırsanız kullanın.
Remy

5
Programlama günümüzde kısaltmalarla ilgilidir. Örnek olarak a Lamp Stack. Bir çok insan muhtemelen sadece LAMP veya WAMP diyecektir. Benzer şekilde, Microsoft SQL Server yerine MS SQL Server'ı MS
SQL'den MSSQL'e yaptık

23

Kimsenin MySQL'in Ortak Tablo İfadelerini (CTE) / "with" ifadelerini desteklemediğinden bahsetmediğine inanamıyorum. Bu oldukça can sıkıcı bir fark.


Hem CTE'leri hem de temp / değişken tablolarını kullandım. Son ikisi üzerinde CTE kullanmanın yararı ne olur?
Jared

8
@Jared CTE'leri kullanmak, geçici tablo ve sütun türlerini tanımlamanız gerekmediğinden kodu okunabilir tutar ve cte'yi kullanarak, belirtmediğiniz halde bile sütun türü ve adı için bir fikir edinirsiniz.
Aleks

9
Özyineleme, söz edilmesi gereken bir faydadır.
Faiz

2
Mysql 8
CTE'yi

Yani mysql şimdi de sözdizimsel şeker alır.
TheLegendaryCopyCoder

15

MySQL'in veritabanı bozulması sorunları olması daha olasıdır ve gerçekleştiklerinde bunları otomatik olarak düzeltmez. Sürüm 6.5 beri MSSQL ile çalıştım ve veritabanı çevrimdışı alarak bir veritabanı bozulması sorunu hatırlamıyorum. Bir üretim ortamında MySQL ile birkaç kez çalıştığımda, bir veritabanı bozulması sorunu, komut satırından sihirli "lütfen bozuk dizinimi düzeltin" olayını çalışana kadar tüm veritabanını çevrimdışı aldı.

Deneyimlerime göre, MSSQL'in işlem ve günlük kaydı sistemi, bir güç döngüsü veya donanım arızası da dahil olmak üzere veritabanı bozulması olmadan hemen hemen her şeyi halleder ve bir şey bozulursa otomatik olarak düzeltir.

Bu benim deneyimimdi ve bunun düzeltildiğini veya yanlış bir şey yaptığımızı duymaktan mutluluk duyarım.

http://dev.mysql.com/doc/refman/6.0/en/corrupted-myisam-tables.html

http://www.google.com/search?q=site%3Abugs.mysql.com+index+corruption


2
myIsam gerçekten hızlı yanıtlar içindir, daha hızlı olması için yabancı anahtar kontrolünü zorlamamıştır. Daha ciddi bir şey yapıyorsanız InnoDB motorunu kullanmayı deneyin. MS Access ile gerçekten kötü sorunlar yaşadım ve bu tür sorumsuzluklar için onları affedemiyorum, bu yüzden MS'in veritabanlarından hiçbirini desteklemiyorum, işletim sistemleri yapmasına izin vermiyorum ve açık kaynak topluluğuna ciddi iş veremiyorum ... Oracle MySQL'i
geçtiğinden

8
Yeterince adil, ancak Access tabanlı Microsoft veritabanlarını görmezden gelmek saçma. Access bir masaüstü veritabanı ve SQL Server ile ilgisi yoktur. StackOverflow'un SQL Server üzerinde çalıştığını biliyorsunuz, değil mi?
Jon Galloway

@JonGalloway: Merhaba ben bir acemiyim. Kesinlikle söylemek istediğim, MS SQL olarak bir şey var mı. Ne var MS SQL Server olduğunu düşünüyorum. Lütfen bu konuda bana açıklık getirebilir misiniz? Bu yaygın bir kelime olabilir, bu yüzden MS SQL olarak kullanmış olabilirsiniz ve her biri için mantıklı olurdu. Ama ben bir acemiyim, bu yüzden konsepti elde etmek için terminolojilerle bağdaştım. Lütfen neden bahsettiğinizi MS SQL veya MS SQL Server olarak bildirin?
Kırılmaz

1
İnsanlar MSSQL, TSQL derken genellikle Microsoft SQL Server ürünü ile birlikte gelen SQL veya Transaction SQL (TSQL) dili anlamına gelir. Bunu bulmak o kadar zor olmamalı. Okuma en.wikipedia.org/wiki/Microsoft_SQL_Server
Faiz


7

Açıkçası, MSSQL yerine MySQL kullanmak için tek bir neden bulamıyorum. Daha önce sorun maliyeti vardı ama SQL Server 2005 Express ücretsizdir ve çok az ayda 5.00 $ için sql sunucusu ile tam hosting sunan web hosting şirketleri bir sürü vardır.

MSSQL'in kullanımı daha kolaydır ve MySQL'de bulunmayan birçok özelliğe sahiptir.


2
Ben fiyat MSSQL üzerinden MySQL seçmek için tek gerçek nedeni olduğunu düşünüyorum. Tabii, bazı ucuz MSSQL hosting var ama nadir ve depolamada ciddi şekilde sınırlıdır.
Craig

21
Lisanslamanın MySQL ile gitmek için oldukça iyi bir neden olduğunu söyleyebilirim.
Dr. Mike

3
Group_concat ve REGEXP, SQL Server üzerinden MySQL kullanmak için fazlasıyla yeterli neden (iki lisans değiştirilse bile)
Michele

1
MySQL ile birlikte gitmemizin bir başka nedeni, yerel bir veritabanı istiyorsanız ve MS SQL Server için giderseniz, daha fazla lisanslama maliyeti içeren bir windows makinesine sahip olmanız gerekir ... güncel
Pedro Braz

2
Önyargılı çünkü MSSQL üzerinden MySQL ile gitmek için tek bir neden olmadığını söylemek yanlış ve açıkçası yanlış olduğunu düşünüyorum. SQL Server Express'in MySQL tarafından yapılmayan ciddi sınırlamaları vardır ve hiçbir ciddi proje Express'i kullanmayacaktır, yani maliyet sorunu hala çok geçerlidir. En büyük şirketlerin çoğu MSSQL yerine MySQL / MariaDB'yi seçti. Şahsen ben de, sadece lisanslama ve maliyet sorunu için değil, aynı zamanda benim deneyimime göre MySQL ile çalışmak çok daha kolay. MySQL, sadece kendimi istediğim şeyi yapmak için MSSQL ile savaşırken buluyorum.
dallin

7

MySQL'deki her şey metale MSSQL'den daha yakın yapılmış gibi görünüyor ve belgeler bu şekilde davranıyor. Özellikle optimizasyon için, dizinlerin, sistem yapılandırmasının ve optimize edicinin çeşitli durumlarda nasıl etkileşim kurduğunu anlamanız gerekir.

"Optimizer" daha çok ayrıştırıcıdır. MSSQL'de sorgu planınız genellikle bir sürprizdir (genellikle iyi, bazen değil). MySQL'de, yapmasını istediğiniz şeyi, beklediğiniz şekilde yapar. Bu, kendisinin yapılabileceği çeşitli yolları derinlemesine anlamanız gerektiği anlamına gelir.

İyi bir TRANSACTION modeli etrafında oluşturulmamıştır (varsayılan MyISAM motoru).

Dosya sistemi kurulumu sizin probleminizdir.

Tüm veritabanı yapılandırması sizin probleminizdir - özellikle çeşitli önbellek boyutları.

Bazen bunu geçici, yüceltilmiş bir isam olarak düşünmek en iyisidir. Codd ve Date burada fazla ağırlık taşımıyor. Bunu utanmadan söylerlerdi.


3
Modern MySQL, Innodb'u varsayılan olarak açıklıyor, sadece bir açıklama noktası. 5.1 ya da daha sonra düşünüyorum. Innodb, MyISAM ile tablo düzeyinde kilitlemenin aksine işlemleri, yabancı anahtarları ve satır düzeyinde kilitlemeyi destekler.
Joseph Hamilton

5

Dikkat edilmesi gereken en önemli şeylerden biri, MySQL 5.0'dan önceki sürümlerin görünüm, tetikleyici ve saklı yordamlara sahip olmamasıdır.

Bunun daha fazlası MySQL 5.0 İndirme sayfasında açıklanmaktadır .


4

@abdu

MySQL'in MSSQL üzerinde bulduğum en önemli şey, saat dilimi desteğidir - gün dilimleri arasında güzel bir şekilde değişiklik yapma yeteneği, gün ışığından yararlanma tasarrufuna saygı duymak harika.

Bunu karşılaştırın:

mysql> SELECT CONVERT_TZ('2008-04-01 12:00:00', 'UTC', 'America/Los_Angeles');
+-----------------------------------------------------------------+
| CONVERT_TZ('2008-04-01 12:00:00', 'UTC', 'America/Los_Angeles') |
+-----------------------------------------------------------------+
| 2008-04-01 05:00:00                                             |
+-----------------------------------------------------------------+

bu cevapta yer alan bükülmelere .

'Kullanımı daha kolay' yorumuna gelince, konu farklı olduklarını söyleyebilirim ve birini tanıyorsanız, diğerini öğrenmenin ek yükü olacaktır.


Ayrıca, grup tarafından doğru ansi desteği, otomatik zaman damgası sütunları, ÇOK daha basit sayfalama ...
Joel Coehoorn

1
MySQL'in saat dilimi desteği önemli ölçüde bozuldu, bunun yararlı bir özellik olduğunu düşünmüyorum. Bunun yerine uygulamada yapın.
MarkR

Saat dilimi desteği ile ilgili herhangi bir sorun yaşamadım, biraz daha ayrıntıya girebilir veya lütfen bir bağlantı sağlayabilir misiniz?
Cebjyre

2
Veritabanında neden saat dilimi desteğine ihtiyacınız var? UTC'yi her yerde kullanın ve işletim sisteminin yerel saat dilimini kullanarak kullanıcı arabiriminde / gui'de oluşturun.
Tiberiu-Ionuț Stan

4

Her ikisi de DBMS'nin Ürün Sql sunucusu ticari bir uygulamadır, MySql bir openouces uygulamasıdır. çoğaltma, granalar güvenlik ve önemli, sql sunucusuna ihtiyacınız var

MySql diskte daha az yer kaplar ve sql sunucusundan daha az bellek ve işlemci kullanır


3

Herkes SQL Server MySQL bir veritabanı "bağlantı noktası" ile iyi bir deneyim var mı?

Bu oldukça acı verici olmalı! MySQL sürümlerini 4.x'ten 5.x'e değiştirdim ve eskiden olduğu gibi çeşitli ifadeler artık çalışmaz. Sorgu çözümleyicisi "geliştirildi", bu nedenle daha önce performans için ayarlanan ifadeler beklendiği gibi çalışmaz.

500 GB'lık bir MySQL veritabanı ile çalışmaktan çıkarılan ders: İnce bir konu ve önemsiz bir şey değil!


2

@Cebjyre. Enterprise Manager veya Management Studio'nun MySQL için şimdiye kadar gördüğüm her şeyden daha iyi olup olmadığı IDE. 'Kullanımı daha kolay' diyorum çünkü MSSQL'de MySQL'in emsali olmayan birçok şey yapabilirim. MySQL'de sadece sorgu planına veya istatistiklere bakarak sorguları nasıl ayarlayacağımı bilmiyorum. MSSQL'deki dizin ayarlama sihirbazı, hangi dizinlerin eksik veya yanlış yerleştirildiğine ilişkin tahmin çalışmalarının çoğunu alır.

MySQL'in eksiklerinden biri, veritabanı için maksimum boyut olmamasıdır. Veritabanının diski doldurana kadar boyutu artar. Bu diskin veritabanlarını diğer kullanıcılarla paylaşıp paylaşmadığını ve aniden tüm sorgularının başarısız olduğunu düşünün, çünkü veritabanları büyüyemez. Bu sorunu uzun zaman önce MySQL'e bildirdim. Henüz sabit olduğunu sanmıyorum.


2
Öte yandan, yönetim stüdyosu konsolu tarafından düzgün bir şekilde geri alınmaması nedeniyle rahatsız oldum (metnin güncellendiğini fark etmediği için boğulduğu geçerli bir sorguya sahip olmak mümkündür) ve sekme eksikliği genişleme (mysql kabuğuna kıyasla). Her iki tarafta da eksi var.
Cebjyre

1

MSSQL'den MySQL sözdizimi POV'a MySQL ile çalışmak için biraz zaman harcayarak yapabileceğim şeyde kendimi sınırlı bulmaya devam ettim.

Bir güncelleme sırasında aynı tabloyu yeniden referanslandırırken bir tabloyu güncellemede tuhaf sınırlar vardır.

Ayrıca UPDATE FROM çalışmıyor ve son kontrol ettiklerinde Oracle MERGE INTO sözdizimini de desteklemiyorlar. Bu benim için bir gösteri tıpası oldu ve ben bundan sonra MySQL ile her yerde alacağını düşünüyorum durdu.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.