Unterschiede zwischen MySQL und SQL Server [geschlossen]

144

Ich bin ein ASP.NET- Entwickler, der Microsoft SQL Serveralle meine Datenbankanforderungen (sowohl bei der Arbeit als auch für persönliche Projekte) erfüllt hat.

Ich denke darüber nach, den LAMP- Stack für einige meiner persönlichen Projekte auszuprobieren.

Was sind einige der Hauptunterschiede zwischen MySQLund SQL Server? Ist die Verwendung gespeicherter Prozeduren eine gängige Praxis MySQL?

Irgendwelche Ratschläge oder Ressourcen, die Sie empfehlen würden, um mir beim Wechsel zu helfen?

Gibt es für diejenigen, die Erfahrung mit beiden haben, fehlende Funktionen von MySQL?

Sestocker
quelle

Antworten:

139

Eine Sache, auf die Sie achten müssen, sind die ziemlich gravierenden Unterschiede in der Art und Weise, wie SQL Server und MySQL die SQL-Syntax implementieren.

Hier ist ein schöner Vergleich verschiedener SQL-Implementierungen .

Schauen Sie sich zum Beispiel den Abschnitt oben-n an. In MySQL:

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

In SQL Server (T-SQL):

SELECT TOP 3 WITH TIES *
FROM person
ORDER BY age ASC
Jeff Atwood
quelle
27
und Orakel ist auch anders: Wählen Sie * aus (wählen Sie das Alter aus der Personenreihenfolge bis vor dem Aufstieg), wo rownum <= 3 Kommen Sie zurück ANSI SQL, alles ist vergeben :)
gbjbaanb
9
Bin gerade darüber gelaufen. Wenn ich über all die Unterschiede lese, erschrecke ich. Die Grundlagen sind die gleichen (zumindest in Bezug auf das Verständnis), aber die Besonderheiten sind sehr, sehr unterschiedlich.
JasCav
21
Vielleicht ein dummer Kommentar, aber warum kann es nicht 1 SQL-Sprache geben? ... gibt es eine andere HTML-Sprache? Warum also nicht 1 SQL?
GreaterKing
4
@greaterKing HTML ist eine festgelegte Struktur und ein Standard eines Komitees / Konsortiums, SQL. Nicht, es ist nur eine Skriptsprache und der einzige Eigentümer ist der Entwickler des Interpreters. In gewisser Weise ähnelt es Javascript. Jeder Browser verfügt über eine eigene JS-Engine und eine eigene Art, das Skript zu interpretieren. Nur durch den bloßen Druck der Gemeinschaft wurden Anstrengungen unternommen, um diese Sprache zu einer Art Solidarität zu bringen. Aber Mann, ich wünschte, sie wären alle sehr ähnlich mit nur geringfügigen Unterschieden
RedactedProfile
2
T-SQL übersetzt in Transact-SQL;) SQL Server enthält die Sprache (T-SQL), aber es ist eine Software als Ganzes mit GUI, die Anfragen lokal und über das Netzwerk usw.
bearbeitet
48

Viele Kommentare hier klingen eher nach religiösen Argumenten als nach Aussagen aus dem wirklichen Leben. Ich habe jahrelang sowohl mit MySQL als auch mit MSSQL gearbeitet und beide sind gute Produkte. Ich würde MySQL hauptsächlich basierend auf der Umgebung wählen, an der Sie arbeiten. Die meisten Open Source-Projekte verwenden MySQL. Wenn Sie also in diese Richtung gehen, ist MySQL Ihre Wahl. Wenn Sie etwas mit .Net entwickeln, würde ich MSSQL wählen, nicht weil es viel besser ist, sondern nur, weil die meisten Leute dies verwenden. Ich bin derzeit in einem Projekt, das ASP.NET mit MySQL und C # verwendet. Es funktioniert einwandfrei.

Remy
quelle
3
Genau genommen glauben Sie nicht, dass es nichts Vergleichbares wie MS SQL gibt. Das, was existiert, ist "MS SQL Server".
Unbreakable
Ich bin sicher, Sie wissen mehr als ich. Ich bin nur ein Anfänger. Kannst du mich bitte wissen lassen, wenn ich mich irre? Gibt es etwas genaues wie MS SQL?
Unbreakable
2
Ich bin nicht sicher, was Sie fragen?
Remy
3
Das ist richtig. Microsoft SQL Server 2012 oder eine andere von Ihnen verwendete Version.
Remy
5
Beim Programmieren dreht sich heutzutage alles um Akronyme. Nehmen wir das Beispiel, in dem Sie über a sprechen Lamp Stack. Viele Leute werden wahrscheinlich nur LAMP oder WAMP sagen. In ähnlicher Weise haben wir, anstatt Microsoft SQL Server zu sagen, MS SQL Server zu MS SQL zu MSSQL gemacht
ytpillai
23

Ich kann nicht glauben, dass niemand erwähnt hat, dass MySQL Common Table Expressions (CTE) / "with" -Anweisungen nicht unterstützt. Es ist ein ziemlich nerviger Unterschied.

ely
quelle
Ich habe sowohl CTEs als auch temporäre / variable Tabellen verwendet. Was wäre der Vorteil eines CTE gegenüber den beiden letztgenannten?
Jared
8
@Jared Mit CTEs bleibt der Code lesbar, da Sie keine temporäre Tabelle und ihre Spaltentypen definieren müssen. Mit cte erhalten Sie sogar eine Intellisense für den Spaltentyp und den Namen, auch wenn Sie diese nicht angegeben haben.
Aleks
9
Rekursion ist ein Vorteil, der erwähnt werden muss.
Faiz
2
MySQL 8 unterstützt CTE
Ivanzinho
So bekommt MySQL jetzt auch syntaktische Süßigkeiten.
TheLegendaryCopyCoder
15

MySQL hat mit größerer Wahrscheinlichkeit Probleme mit der Datenbankbeschädigung und behebt diese nicht automatisch, wenn sie auftreten. Ich habe seit Version 6.5 mit MSSQL gearbeitet und kann mich nicht an ein Datenbankbeschädigungsproblem erinnern, bei dem die Datenbank offline geschaltet wurde. Die wenigen Male, die ich mit MySQL in einer Produktionsumgebung gearbeitet habe, hat ein Datenbankbeschädigungsproblem die gesamte Datenbank offline geschaltet, bis wir die magische Funktion "Bitte beheben Sie meinen beschädigten Index" über die Befehlszeile ausgeführt haben.

Das Transaktions- und Journaling-System von MSSQL verarbeitet meiner Erfahrung nach fast alles - einschließlich eines Aus- und Wiedereinschaltvorgangs oder eines Hardwarefehlers - ohne Beschädigung der Datenbank. Wenn etwas durcheinander kommt, wird es automatisch behoben.

Dies war meine Erfahrung und ich würde mich freuen zu hören, dass dies behoben wurde oder wir etwas falsch gemacht haben.

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

Jon Galloway
quelle
2
myIsam ist für sehr schnelle Antworten gedacht. Es hat keine erzwungene Überprüfung von Fremdschlüsseln erforderlich, um schneller zu sein. Versuchen Sie es mit der InnoDB-Engine, wenn Sie etwas Ernsthafteres tun. Ich hatte einige wirklich schlimme Probleme mit MS Access und kann ihnen diese Verantwortungslosigkeit nicht verzeihen. Deshalb bevorzuge ich keine der MS-Datenbanken, lasse sie Betriebssysteme ausführen und gebe der Open Source-Community ernsthafte Geschäfte ... obwohl Sie das nicht können sicher von allem, seit Oracle MySQL überholt hatte ..
ante.sabo
8
Fair genug, aber das ist albern, Microsoft-Datenbanken zu ignorieren, die auf Access basieren. Access ist eine Desktop-Datenbank und hat nichts mit SQL Server zu tun. Sie wissen, dass StackOverflow auf SQL Server ausgeführt wird, oder?
Jon Galloway
@ JonGalloway: Hallo, ich bin ein Anfänger. Ich möchte nur genau wissen, ob wir etwas als MS SQL haben. Ich denke, was existiert, ist MS SQL Server. Können Sie mir das bitte klarstellen? Es könnte ein gebräuchliches Wort sein, also hätten Sie es möglicherweise als MS SQL verwendet und es hätte für jeden Sinn ergeben. Aber ich bin ein Anfänger, also bin ich irgendwie auf Terminologien fixiert, um das Konzept zu bekommen. Bitte lassen Sie mich wissen, wovon Sie sprechen, ist MS SQL oder MS SQL Server?
Unbreakable
1
Wenn Leute MSSQL, TSQL sagen, meinen sie im Allgemeinen die SQL- oder Transaction SQL (TSQL) -Sprache, die mit dem Produkt Microsoft SQL Server geliefert wird. Dies sollte nicht so schwer herauszufinden sein. Lesen Sie weiter en.wikipedia.org/wiki/Microsoft_SQL_Server
Faiz
@ JonGalloway und hier ist die Referenz: stackoverflow.blog/2008/09/what-was-stack-overflow-built-with
Moayad Hani Abu Rmilah
7

Ehrlich gesagt kann ich keinen einzigen Grund finden, MySQL anstelle von MSSQL zu verwenden. Früher war das Problem kostenpflichtig, aber SQL Server 2005 Express ist kostenlos und es gibt viele Webhosting-Unternehmen, die vollständiges Hosting mit SQL Server für weniger als 5,00 USD pro Monat anbieten.

MSSQL ist einfacher zu verwenden und verfügt über viele Funktionen, die in MySQL nicht vorhanden sind.

Abdu
quelle
2
Ich denke, der Preis ist der einzige wirkliche Grund, MySQL gegenüber MSSQL zu wählen. Sicher, es gibt ein billiges MSSQL-Hosting, aber es ist selten und oft stark eingeschränkt.
Craig
21
Ich würde sagen, dass die Lizenzierung ein ziemlich guter Grund ist, sich für MySQL zu entscheiden.
Dr. Mike
3
Group_concat und REGEXP sind mehr als genug Gründe, MySQL über SQL Server zu verwenden (auch wenn die beiden Lizenzen gewechselt wurden)
Michele
1
Ein weiterer Grund, warum ich mich für MySQL entschieden habe, ist, dass wenn Sie eine lokale Datenbank und MS SQL Server verwenden möchten, ein Windows-Computer ausgeführt werden muss, der mehr Lizenzkosten beinhaltet ... insbesondere, wenn Sie alles behalten möchten aktuell
Pedro Braz
2
Downvoted, weil ich denke, dass es voreingenommen und offensichtlich ungenau ist zu sagen, dass es keinen einzigen Grund gibt, mit MySQL über MSSQL zu gehen. SQL Server Express weist schwerwiegende Einschränkungen auf, die MySQL nicht aufweist, und kein ernsthaftes Projekt wird Express verwenden, was bedeutet, dass das Kostenproblem immer noch sehr gültig ist. Die meisten der größten Unternehmen haben sich für MySQL / MariaDB gegenüber MSSQL entschieden. Persönlich würde ich auch, nicht nur wegen der Lizenzierung und der Kosten, sondern weil MySQL meiner Erfahrung nach viel einfacher zu bearbeiten ist. MySQL funktioniert normalerweise nur, während ich gelegentlich mit MSSQL kämpfe, um es dazu zu bringen, das zu tun, was ich will.
Dallas
7

Alles in MySQL scheint näher am Metall zu sein als in MSSQL, und die Dokumentation behandelt es so. Insbesondere für die Optimierung müssen Sie verstehen, wie Indizes, Systemkonfiguration und das Optimierungsprogramm unter verschiedenen Umständen interagieren.

Der "Optimierer" ist eher ein Parser. In MSSQL ist Ihr Abfrageplan oft eine Überraschung (normalerweise gut, manchmal nicht). In MySQL macht es so ziemlich das, was Sie von ihm verlangt haben, so wie Sie es erwartet haben. Das bedeutet, dass Sie selbst ein tiefes Verständnis für die verschiedenen Möglichkeiten haben müssen.

Nicht um ein gutes TRANSACTION-Modell herum aufgebaut (Standard-MyISAM-Engine).

Die Einrichtung des Dateisystems ist Ihr Problem.

Die gesamte Datenbankkonfiguration ist Ihr Problem - insbesondere verschiedene Cache-Größen.

Manchmal scheint es am besten, es als einen ad-hoc verherrlichten Isam zu betrachten. Codd und Date haben hier nicht viel Gewicht. Sie würden es ohne Verlegenheit sagen.

dkretz
quelle
3
Modernes MySQL ist jedoch standardmäßig Innodb, nur zur Verdeutlichung. Ich denke nach 5.1 oder so. Innodb unterstützt Transaktionen, Fremdschlüssel und Sperren auf Zeilenebene im Gegensatz zum Sperren auf Tabellenebene mit MyISAM.
Joseph Hamilton
5

Ich denke, eines der wichtigsten Dinge, auf die Sie achten sollten, ist, dass Versionen vor MySQL 5.0 keine Ansichten, Trigger und gespeicherten Prozeduren hatten.

Weitere Informationen hierzu finden Sie auf der MySQL 5.0-Download-Seite .

Jon Limjap
quelle
4

@abdu

Die Hauptsache, die MySQL gegenüber MSSQL hat, ist die Zeitzonenunterstützung - die Möglichkeit, zwischen Zeitzonen zu wechseln und dabei die Sommerzeit zu berücksichtigen, ist fantastisch.

Vergleichen Sie dies:

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

zu den Verrenkungen bei dieser Antwort .

Was den "einfacher zu verwendenden" Kommentar betrifft, würde ich sagen, dass der Punkt darin besteht, dass sie unterschiedlich sind, und wenn Sie einen kennen, wird es einen Aufwand bedeuten, den anderen zu lernen.

Cebjyre
quelle
Auch korrekte Ansi-Unterstützung für Gruppieren nach, automatische Zeitstempelspalten, VIEL einfacheres Paging ...
Joel Coehoorn
1
Die Zeitzonenunterstützung von MySQL ist erheblich beeinträchtigt. Ich denke nicht, dass dies eine nützliche Funktion ist. Tun Sie es stattdessen in der Anwendung.
MarkR
Ich hatte keine Probleme mit der Zeitzonenunterstützung. Könnten Sie bitte auf weitere Details eingehen oder einen Link angeben?
Cebjyre
2
Warum benötigen Sie Zeitzonenunterstützung in der Datenbank? Verwenden Sie UTC überall und rendern Sie im Frontend / GUI unter Verwendung der lokalen Zeitzone des Betriebssystems.
Tiberiu-Ionuț Stan
4

Bei beiden handelt es sich bei dem Produkt-SQL-Server von DBMS um eine kommerzielle Anwendung, während MySQL eine OpenSouces-Anwendung ist. Beide Produkte enthalten ähnliche Funktionen. Der SQL-Server sollte jedoch für eine Unternehmenslösung verwendet werden, während MySQL möglicherweise für eine kleinere Implementierung geeignet ist. Replikation, granalare Sicherheit und signifikante, benötigen Sie SQL Server

MySQL nimmt weniger Speicherplatz auf der Festplatte ein und benötigt weniger Speicher und CPU als SQL Server

Prinz
quelle
3

Hat jemand gute Erfahrungen mit einem "Port" einer Datenbank von SQL Server zu MySQL?

Das sollte ziemlich schmerzhaft sein! Ich habe die Versionen von MySQL von 4.x auf 5.x umgestellt und verschiedene Anweisungen würden nicht mehr so ​​funktionieren wie früher. Der Abfrageanalysator wurde "verbessert", sodass zuvor auf Leistung abgestimmte Anweisungen nicht mehr wie erwartet funktionieren.

Die Lektion aus der Arbeit mit einer 500-GB-MySQL-Datenbank: Es ist ein subtiles Thema und alles andere als trivial!

Dlinsin
quelle
2

@ Cejjyre. Die IDE, ob Enterprise Manager oder Management Studio, ist besser als alles, was ich bisher für MySQL gesehen habe. Ich sage "einfacher zu bedienen", weil ich viele Dinge in MSSQL tun kann, wo MySQL keine Gegenstücke hat. In MySQL habe ich keine Ahnung, wie ich die Abfragen optimieren soll, indem ich einfach den Abfrageplan oder die Statistiken betrachte. Der Indexoptimierungsassistent in MSSQL übernimmt den größten Teil der Rätselraten darüber, welche Indizes fehlen oder verlegt sind.

Ein Nachteil von MySQL ist, dass es keine maximale Größe für eine Datenbank gibt. Die Datenbank würde nur größer werden, bis die Festplatte voll ist. Stellen Sie sich vor, diese Festplatte teilt Datenbanken mit anderen Benutzern und plötzlich schlagen alle Abfragen fehl, weil ihre Datenbanken nicht wachsen können. Ich habe dieses Problem vor langer Zeit MySQL gemeldet. Ich denke, es ist noch nicht behoben.

Abdu
quelle
2
Auf der anderen Seite habe ich mich darüber geärgert, dass die Management Studio-Konsole das Rückgängigmachen nicht richtig respektiert (es ist möglich, dass eine gültige Abfrage erstickt wird, weil nicht erkannt wird, dass der Text aktualisiert wurde) und dass keine Registerkarte vorhanden ist -Erweiterung (im Vergleich zu MySQL-Shell). Es gibt Minuspunkte auf beiden Seiten.
Cebjyre
1

Während ich einige Zeit mit MySQL von der MSSQL- bis zur MySQL-Syntax POV arbeitete, war ich immer wieder in meinen Möglichkeiten eingeschränkt.

Es gibt bizzare Grenzen für das Aktualisieren einer Tabelle, während dieselbe Tabelle während eines Updates aktualisiert wird.

Außerdem funktioniert UPDATE FROM nicht und als ich das letzte Mal überprüft habe, unterstützen sie auch nicht die Oracle MERGE INTO-Syntax. Dies war ein Show Stopper für mich und ich hörte auf zu denken, dass ich danach mit MySQL irgendwohin kommen würde.


quelle