Różnice między MySQL i SQL Server [zamknięte]


144

Jestem programistą ASP.NET, który wykorzystywał Microsoft SQL Serverwszystkie moje potrzeby związane z bazami danych (zarówno w pracy, jak i przy projektach osobistych).

Rozważam wypróbowanie stosu LAMP do niektórych moich osobistych projektów.

Jakie są główne różnice między MySQLi SQL Server? Czy używanie procedur składowanych jest powszechną praktyką w programie MySQL?

Jakieś rady lub zasoby, które poleciłbyś mi przy zmianie?

Czy dla tych, którzy mają doświadczenie w obu przypadkach, brakuje jakichś funkcji MySQL?

Odpowiedzi:


139

Jedną rzeczą, na którą musisz zwrócić uwagę, są dość poważne różnice w sposobie implementacji składni SQL przez SQL Server i MySQL.

Oto ładne porównanie różnych implementacji SQL .

Na przykład spójrz na sekcję u góry n. W MySQL:

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

W programie SQL Server (T-SQL):

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

27
a wyrocznia też jest inna: wybierz * z (wybierz wiek z kolejności osób według wstecz rosnąco) gdzie rownum <= 3 Wróć ANSI SQL, wszystko jest wybaczone :)
gbjbaanb

9
Po prostu przez to natrafiłem. Wzdrygam się, czytając o wszystkich różnicach. Podstawy są takie same (przynajmniej jeśli chodzi o zrozumienie), ale szczegóły są bardzo, bardzo różne.
JasCav

21
może głupi komentarz, ale dlaczego nie może być 1 język sql? ... czy jest inny html ?? ... więc dlaczego nie 1 sql.
GreaterKing

4
@greaterKing HTML jest ustaloną strukturą i standardem opracowanym przez komitet / konsorcjum, SQL .. nie jest, to tylko język skryptowy, a jedynym właścicielem jest programista tłumacza. To trochę jak Javascript w pewnym sensie, każda przeglądarka ma swój własny silnik JS i swój własny sposób interpretacji skryptu. Tylko pod naciskiem społeczności podjęto wysiłki, aby doprowadzić ten język do pewnego rodzaju solidarności. Ale człowieku, żałuję, że wszystkie były bardzo podobne z niewielkimi różnicami
RedactedProfile

2
T-SQL przekłada się na Transact-SQL;) Sql Server zawiera język (T-SQL), ale jest to oprogramowanie jako całość, z GUI, obsługujące żądania lokalnie i przez sieć itp.
Botond Bertalan

48

Wiele komentarzy brzmi bardziej jak argumenty religijne niż stwierdzenia z życia wzięte. Pracowałem od lat z MySQL i MSSQL i oba są dobrymi produktami. MySQL wybrałbym głównie w oparciu o środowisko, na którym pracujesz. Większość projektów open source używa MySQL, więc jeśli pójdziesz w tym kierunku, MySQL jest twoim wyborem. Jeśli tworzysz coś z .Net, wybrałbym MSSQL nie dlatego, że jest dużo lepszy, ale dlatego, że właśnie tego używa większość ludzi. Obecnie jestem w projekcie, który używa ASP.NET z MySQL i C #. Działa doskonale.


3
Ściśle mówiąc, nie sądzisz, że nie ma czegoś takiego jak MS SQL. Rzecz, która istnieje, to „MS SQL Server”.
Unbreakable

Jestem pewien, że wiesz więcej niż ja. Jestem tylko początkującym, czy możesz dać mi znać, jeśli się mylę? Czy jest coś takiego jak MS SQL?
Unbreakable

2
Nie jestem pewien, o co pytasz?
Remy,

3
To jest poprawne. Microsoft SQL Server 2012 lub dowolna używana wersja.
Remy,

5
W dzisiejszych czasach w programowaniu chodzi o akronimy. Weźmy przykład, jak mówisz o pliku Lamp Stack. Wiele osób prawdopodobnie powie LAMP lub WAMP. Podobnie, zamiast mówić o Microsoft SQL Server, zmieniliśmy go z MS SQL Server na MS SQL na MSSQL
ytpillai

23

Nie mogę uwierzyć, że nikt nie wspomniał, że MySQL nie obsługuje instrukcji Common Table Expressions (CTE) / „with”. To dość denerwująca różnica.


Użyłem zarówno CTE, jak i tabel temp / zmiennych. Jaka byłaby korzyść z zastosowania CTE w porównaniu z dwoma ostatnimi?
Jared

8
@Jared Użycie CTE sprawia, że ​​kod jest czytelny, ponieważ nie musisz definiować tabeli tymczasowej i jej typów kolumn, a używając cte, uzyskujesz nawet inteligencję dla typu i nazwy kolumny, nawet jeśli ich nie określiłeś.
Aleks,

9
Rekurencja to jedna z korzyści, o której należy wspomnieć.
Faiz

2
MySQL 8 obsługuje CTE
Ivanzinho

Więc mysql ma teraz również cukierki składniowe.
TheLegendaryCopyCoder

15

MySQL częściej ma problemy z uszkodzeniem bazy danych i nie naprawia ich automatycznie, gdy się pojawią. Pracowałem z MSSQL od wersji 6.5 i nie pamiętam problemu z uszkodzeniem bazy danych, powodując przejście do trybu offline. Kilka razy, kiedy pracowałem z MySQL w środowisku produkcyjnym, problem z uszkodzeniem bazy danych spowodował, że cała baza danych stała się offline, dopóki nie uruchomiliśmy magicznego polecenia „proszę naprawić uszkodzony indeks” z wiersza poleceń.

Z mojego doświadczenia wynika, że ​​system transakcji i kronikowania MSSQL obsługuje prawie wszystko - w tym cykl zasilania lub awarię sprzętu - bez uszkodzenia bazy danych, a jeśli coś się zepsuje, naprawia to automatycznie.

Takie było moje doświadczenie i byłbym szczęśliwy, słysząc, że zostało to naprawione lub zrobiliśmy coś nie tak.

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 jest przeznaczony do naprawdę szybkich odpowiedzi, nie ma powodu wymuszonego sprawdzania klucza obcego, aby być szybszym. Spróbuj użyć silnika InnoDB, jeśli robisz coś poważniejszego. Miałem naprawdę paskudne problemy z MS Access i nie mogę im wybaczyć takiej nieodpowiedzialności, więc nie faworyzuję żadnej z baz danych MS, pozwalam im robić systemy operacyjne i daję poważny biznes społeczności open source ... chociaż nie możesz być jestem pewien wszystkiego, odkąd Oracle wyprzedziło MySQL ..
ante.sabo

8
W porządku, ale ignorowanie baz danych Microsoft opartych na programie Access jest głupie. Dostęp do tego jest bazą danych dla komputerów stacjonarnych i nie ma nic wspólnego z programem SQL Server. Wiesz, że StackOverflow działa na SQL Server, prawda?
Jon Galloway

@JonGalloway: Cześć, jestem początkującym. Chcę tylko wiedzieć, ściśle mówiąc, czy mamy coś takiego jak MS SQL. Myślę, że istnieje MS SQL Server. Czy możesz mi to wyjaśnić. Może to być powszechne słowo, więc możesz użyć go jako MS SQL i miałoby to sens dla każdego. Ale jestem początkującym, więc jestem trochę zafiksowany terminologią, aby zrozumieć koncepcję. Daj mi znać, o czym mówisz to MS SQL czy MS SQL Server?
Unbreakable

1
Kiedy ludzie mówią MSSQL, TSQL, mają na myśli język SQL lub język Transaction SQL (TSQL) dostarczany z produktem Microsoft SQL Server. Nie powinno być to trudne do ustalenia. Przeczytaj na en.wikipedia.org/wiki/Microsoft_SQL_Server
Faiz


7

Szczerze mówiąc, nie mogę znaleźć ani jednego powodu, by używać MySQL zamiast MSSQL. Wcześniej problem był kosztowny, ale SQL Server 2005 Express jest darmowy i istnieje wiele firm hostingowych, które oferują pełny hosting z serwerem sql za mniej niż 5,00 $ miesięcznie.

MSSQL jest łatwiejszy w użyciu i ma wiele funkcji, których nie ma w MySQL.


2
Myślę, że cena jest jedynym prawdziwym powodem, aby wybrać MySQL zamiast MSSQL. Jasne, istnieje tani hosting MSSQL, ale jest on rzadki i często ma bardzo ograniczoną pojemność.
Craig

21
Powiedziałbym, że licencja to całkiem dobry powód, aby wybrać MySQL.
Dr. Mike

3
Group_concat i REGEXP to więcej niż wystarczający powód, aby używać MySQL zamiast SQL Server (nawet jeśli dwie licencje zostały zamienione)
Michele

1
Innym powodem, dla którego wybrałbym MySQL, byłoby to, że jeśli chcesz mieć lokalną bazę danych i wybierasz MS SQL Server, musisz mieć uruchomioną maszynę z systemem Windows, która obejmuje więcej kosztów licencji ... szczególnie, jeśli chcesz to wszystko zachować aktualne
Pedro Braz

2
Negocjowane, ponieważ uważam, że jest to stronnicze i oczywiście niedokładne, aby powiedzieć, że nie ma ani jednego powodu, aby wybrać MySQL zamiast MSSQL. SQL Server Express ma poważne ograniczenia, których nie ma MySQL, i żaden poważny projekt nie będzie używał Express, co oznacza, że ​​kwestia kosztów jest nadal bardzo aktualna. Większość największych firm wybrała MySQL / MariaDB zamiast MSSQL. Osobiście też bym to zrobił, nie tylko ze względu na licencje i koszty, ale z mojego doświadczenia wynika, że ​​MySQL jest po prostu dużo łatwiejszy w obsłudze. MySQL zwykle po prostu działa, podczas gdy czasami walczę z MSSQL, aby zmusić go do zrobienia tego, co chcę.
dallin

7

Wszystko w MySQL wydaje się być zrobione bliżej metalu niż w MSSQL, a dokumentacja traktuje to w ten sposób. Szczególnie w przypadku optymalizacji musisz zrozumieć, w jaki sposób indeksy, konfiguracja systemu i optymalizator współdziałają w różnych okolicznościach.

„Optymalizator” to bardziej parser. W MSSQL twój plan zapytań jest często niespodzianką (zwykle dobry, czasem nie). W MySQL robi właściwie to, o co go prosiłeś, tak, jak tego oczekiwałeś. Co oznacza, że ​​sam musisz dobrze zrozumieć różne sposoby, w jakie można to zrobić.

Nie zbudowany wokół dobrego modelu TRANSACTION (domyślny silnik MyISAM).

Twoim problemem jest konfiguracja systemu plików.

Cała konfiguracja bazy danych jest Twoim problemem - szczególnie różne rozmiary pamięci podręcznej.

Czasami wydaje się, że najlepiej jest myśleć o tym jako o ad-hoc, gloryfikowanym isamie. Codd i Date nie mają tu zbytniej wagi. Powiedzieliby to bez zażenowania.


3
Współczesny MySQL domyślnie przyjmuje jednak Innodb, tylko kwestia wyjaśnienia. Myślę, że po 5.1. Innodb obsługuje transakcje, klucze obce i blokowanie na poziomie wiersza w przeciwieństwie do blokowania na poziomie tabeli w MyISAM.
Joseph Hamilton

5

Myślę, że jedną z głównych rzeczy, na które należy zwrócić uwagę, jest to, że wersje wcześniejsze niż MySQL 5.0 nie miały widoków, wyzwalaczy i procedur składowanych.

Więcej informacji na ten temat można znaleźć na stronie pobierania MySQL 5.0 .


4

@abdu

Najważniejszą rzeczą, jaką odkryłem, że MySQL ma ponad MSSQL, jest obsługa stref czasowych - możliwość ładnego przełączania się między strefami czasowymi, z poszanowaniem czasu letniego, jest fantastyczna.

Porównaj to:

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                                             |
+-----------------------------------------------------------------+

na skrzywienie związane z tą odpowiedzią .

Jeśli chodzi o komentarz „łatwiejszy w użyciu”, powiedziałbym, że chodzi o to, że są one różne, a jeśli znasz jeden, nauka drugiego będzie kosztować.


Popraw obsługę ansi dla grupowania według, automatycznych kolumn ze znacznikami czasu, DUŻO prostszego stronicowania ...
Joel Coehoorn

1
Obsługa stref czasowych MySQL jest znacząco zepsuta, nie sądzę, żeby to była użyteczna funkcja. Zamiast tego zrób to w aplikacji.
MarkR

Nie miałem żadnych problemów z obsługą stref czasowych, czy mógłbyś podać więcej szczegółów lub podać link?
Cebjyre,

2
Dlaczego potrzebujesz obsługi stref czasowych w bazie danych? Używaj UTC wszędzie i renderuj w interfejsie użytkownika / interfejsie użytkownika, korzystając z lokalnej strefy czasowej systemu operacyjnego.
Tiberiu-Ionuț Stan

4

Oba to serwer DBMS Product Sql jest aplikacją komercyjną, podczas gdy MySql jest aplikacją opensouces Oba produkty mają podobną funkcję, jednak serwer sql powinien być używany dla rozwiązania korporacyjnego, podczas gdy mysql może pasować do mniejszych wdrożeń. Jeśli potrzebujesz funkcji takiej jak odzyskiwanie, replikacja, bezpieczeństwo granalar i istotne, potrzebujesz serwera sql

MySql zajmuje mniej miejsca na dysku oraz zużywa mniej pamięci i procesora niż serwer sql


3

Czy ktoś ma dobre doświadczenia z „portem” bazy danych z SQL Server do MySQL?

To powinno być dość bolesne! Zmieniłem wersje MySQL z 4.x na 5.x i różne instrukcje nie działały już tak, jak kiedyś. Analizator zapytań został „ulepszony”, więc instrukcje, które wcześniej były dostrojone pod kątem wydajności, nie będą już działać zgodnie z oczekiwaniami.

Lekcja wyciągnięta z pracy z bazą danych MySQL o pojemności 500 GB: to subtelny temat i wszystko inne, ale trywialne!


2

@Cebjyre. IDE, czy Enterprise Manager czy Management Studio, jest lepsze niż wszystko, co do tej pory widziałem dla MySQL. Mówię „łatwiejszy w użyciu”, ponieważ mogę zrobić wiele rzeczy w MSSQL, gdzie MySQL nie ma odpowiedników. W MySQL nie mam pojęcia, jak dostroić zapytania, po prostu patrząc na plan zapytań lub patrząc na statystyki. Kreator dostrajania indeksów w MSSQL zajmuje się większością zgadywania, których indeksów brakuje lub które są niewłaściwie umieszczone.

Jedną z wad MySQL jest brak maksymalnego rozmiaru bazy danych. Baza danych po prostu powiększyłaby się, aż zapełniłaby dysk. Wyobraź sobie, że ten dysk udostępnia bazy danych innym użytkownikom i nagle wszystkie ich zapytania kończą się niepowodzeniem, ponieważ ich bazy danych nie mogą się rozwijać. Zgłosiłem ten problem do MySQL dawno temu. Nie sądzę, że to jeszcze naprawione.


2
Z drugiej strony zirytowało mnie to, że konsola studia zarządzania nie respektuje poprawnie cofnięcia (można mieć poprawne zapytanie, którym się dusi, bo nie zdaje sobie sprawy, że tekst został zaktualizowany) oraz brak zakładki -expansion (w porównaniu do powłoki mysql). Po obu stronach są minusy.
Cebjyre,

1

Poświęcając trochę czasu na pracę z MySQL, od MSSQL do składni MySQL POV. Wciąż byłem ograniczony w tym, co mogłem zrobić.

Istnieją dziwaczne ograniczenia dotyczące aktualizacji tabeli podczas odnawiania tej samej tabeli podczas aktualizacji.

Dodatkowo UPDATE FROM nie działa i kiedy ostatnio sprawdzałem, nie obsługują również składni Oracle MERGE INTO. To było dla mnie zatrzymanie pokazu i przestałem myśleć, że później osiągnę coś z MySQL.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.