Différences entre MySQL et SQL Server [fermé]

144

Je suis un développeur ASP.NET qui a utilisé Microsoft SQL Serverpour tous mes besoins de base de données (à la fois au travail et pour des projets personnels).

J'envisage d'essayer la pile LAMP pour certains de mes projets personnels.

Quelles sont certaines des principales différences entre MySQL et SQL Server? L'utilisation de procédures stockées est-elle une pratique courante dans MySQL?

Des conseils ou des ressources que vous recommanderiez pour m'aider avec le changement?

Pour ceux qui ont l'expérience des deux, y a-t-il des fonctionnalités manquantes dans MySQL ?

éleveur
la source

Réponses:

139

Une chose à surveiller est les différences assez importantes dans la manière dont SQL Server et MySQL implémentent la syntaxe SQL.

Voici une belle comparaison de différentes implémentations SQL .

Par exemple, jetez un œil à la section top-n. Dans MySQL:

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

Dans SQL Server (T-SQL):

SELECT TOP 3 WITH TIES *
FROM person
ORDER BY age ASC
Jeff Atwood
la source
27
et oracle est également différent: sélectionnez * à partir de (sélectionnez l'âge de la personne triée il y a par asc) où rownum <= 3 Revenez ANSI SQL, tout est pardonné :)
gbjbaanb
9
Je viens de traverser ça. La lecture de toutes les différences me fait grincer des dents. Les bases sont les mêmes (au moins en termes de compréhension), mais les spécificités sont très, très différentes.
JasCav
21
peut-être un commentaire stupide mais pourquoi ne peut-il pas y avoir 1 langage sql ?? ... y a-t-il un html différent ?? ... alors pourquoi pas 1 sql.
GreaterKing
4
@greaterKing HTML est une structure et un standard établis par un comité / consortium, SQL .. n'est pas, c'est juste un langage de script et le seul propriétaire est le développeur de l'interpréteur. C'est un peu comme Javascript dans un sens, chaque navigateur a son propre moteur JS et sa propre façon d'interpréter le script. Ce n'est que par la simple pression de la communauté que des efforts pour amener ce langage à une sorte de solidarité ont été mis en place. Mais j'aimerais bien qu'ils soient tous extrêmement similaires avec seulement des différences mineures
Profil
2
T-SQL se traduit par Transact-SQL;) Sql Server inclut le langage (T-SQL) mais c'est un logiciel dans son ensemble, avec interface graphique, gérant les demandes localement et via le réseau, etc.
Botond Bertalan
48

Beaucoup de commentaires ici ressemblent plus à des arguments religieux qu'à des déclarations de la vie réelle. J'ai travaillé pendant des années avec MySQL et MSSQL et les deux sont de bons produits. Je choisirais MySQL principalement en fonction de l'environnement sur lequel vous travaillez. La plupart des projets open source utilisent MySQL, donc si vous allez dans cette direction, MySQL est votre choix. Si vous développez quelque chose avec .Net, je choisirais MSSQL, non pas parce que c'est beaucoup mieux, mais simplement parce que c'est ce que la plupart des gens utilisent. Je suis actuellement sur un projet qui utilise ASP.NET avec MySQL et C #. Cela fonctionne parfaitement bien.

Remy
la source
3
À proprement parler, ne pensez-vous pas qu'il n'y a rien de tel que MS SQL. La chose qui existe est "MS SQL Server".
Incassable le
Je suis sûr que vous en savez plus que moi. Je ne suis qu'un débutant, pouvez-vous me faire savoir si je me trompe? Y a-t-il quelque chose d'exact comme MS SQL?
Incassable le
2
Je ne suis pas sûr de ce que vous demandez?
Remy
3
C'est correct. Microsoft SQL Server 2012 ou quelle que soit la version que vous utilisez.
Remy
5
La programmation est aujourd'hui une question d'acronymes. Prenons l'exemple de vous parlez d'un Lamp Stack. Beaucoup de gens diront probablement LAMP ou WAMP. De même, au lieu de dire Microsoft SQL Server, nous avons fait de MS SQL Server vers MS SQL vers MSSQL
ytpillai
23

Je ne peux pas croire que personne n'ait mentionné que MySQL ne prend pas en charge les expressions de table communes (CTE) / "with". C'est une différence assez ennuyeuse.

ely
la source
J'ai utilisé à la fois des CTE et des tables temporaires / variables. Quel serait l'avantage d'utiliser un CTE sur les deux derniers?
Jared
8
@Jared Using CTEs garde le code lisible car vous n'avez pas besoin de définir une table temporaire et ses types de colonnes et en utilisant cte, vous obtenez même une intelligence pour le type et le nom de la colonne même si vous ne les avez pas spécifiés.
Aleks
9
La récursivité est un avantage qui mérite d'être mentionné.
Faiz
2
Mysql 8 soutient CTE
Ivanzinho
Ainsi, mysql reçoit maintenant également des bonbons syntaxiques.
TheLegendaryCopyCoder
15

MySQL est plus susceptible d'avoir des problèmes de corruption de base de données et ne les résout pas automatiquement lorsqu'ils se produisent. J'ai travaillé avec MSSQL depuis la version 6.5 et je ne me souviens pas d'un problème de corruption de base de données mettant la base de données hors ligne. Les quelques fois où j'ai travaillé avec MySQL dans un environnement de production, un problème de corruption de la base de données a mis la base de données entière hors ligne jusqu'à ce que nous ayons exécuté le truc magique "s'il vous plaît réparer mon index corrompu" depuis la ligne de commande.

Le système de transaction et de journalisation de MSSQL, d'après mon expérience, gère à peu près tout - y compris un cycle d'alimentation ou une panne matérielle - sans corruption de la base de données, et si quelque chose est gâché, il le corrige automatiquement.

Cela a été mon expérience et je serais heureux d'apprendre que cela a été corrigé ou que nous faisions quelque chose de mal.

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
la source
2
myIsam est conçu pour des réponses très rapides, il n'a pas forcé l'enregistrement de clé étrangère pour être plus rapide. Essayez d'utiliser le moteur InnoDB si vous faites quelque chose de plus sérieux. J'ai eu des problèmes vraiment désagréables avec MS Access, et je ne peux pas leur pardonner une telle irresponsabilité, donc je ne favorise aucune des bases de données de MS, je les laisse faire des systèmes d'exploitation et je donne des affaires sérieuses à la communauté open source ... bien que vous ne puissiez pas être sûr de tout depuis qu'Oracle a dépassé MySQL ..
ante.sabo
8
Assez juste, mais c'est idiot d'ignorer les bases de données Microsoft basées sur Access. Access it est une base de données de bureau et n'a rien à voir avec SQL Server. Vous savez que StackOverflow fonctionne sur SQL Server, non?
Jon Galloway
@JonGalloway: Salut, je suis un débutant. Je veux juste savoir à proprement parler si nous avons quelque chose en tant que MS SQL. Je pense que ce qui existe est MS SQL Server. Pouvez-vous s'il vous plaît me clarifier à ce sujet. C'est peut-être un mot courant, vous l'avez peut-être utilisé comme MS SQL et cela aurait eu du sens pour tout le monde. Mais je suis un débutant, donc je suis un peu obsédé par les terminologies pour comprendre le concept. Veuillez me faire savoir de quoi vous parlez est MS SQL ou MS SQL Server?
Incassable le
1
Lorsque les gens disent MSSQL, TSQL, ils désignent généralement le langage SQL ou Transaction SQL (TSQL) fourni avec le produit Microsoft SQL Server. Cela ne devrait pas être si difficile à découvrir. Lire sur en.wikipedia.org/wiki/Microsoft_SQL_Server
Faiz
@JonGalloway et voici la référence: stackoverflow.blog/2008/09/what-was-stack-overflow-built-with
Moayad Hani Abu Rmilah
7

Franchement, je ne trouve pas une seule raison d'utiliser MySQL plutôt que MSSQL. Le problème avant était coûteux, mais SQL Server 2005 Express est gratuit et il existe de nombreuses sociétés d'hébergement Web qui offrent un hébergement complet avec serveur SQL pour moins de 5,00 $ par mois.

MSSQL est plus facile à utiliser et possède de nombreuses fonctionnalités qui n'existent pas dans MySQL.

Abdu
la source
2
Je pense que le prix est la seule vraie raison de choisir MySQL plutôt que MSSQL. Bien sûr, il existe un hébergement MSSQL bon marché, mais il est rare et souvent très limité sur le stockage.
Craig
21
Je dirais que la licence est une très bonne raison d'utiliser MySQL.
Dr Mike
3
Group_concat et REGEXP sont des raisons plus que suffisantes pour utiliser MySQL sur SQL Server (même si les deux licences ont été changées)
Michele
1
une autre raison pour laquelle j'irais avec MySQL serait que si vous voulez une base de données locale et que vous optez pour MS SQL Server, vous devrez faire fonctionner une machine Windows, ce qui comprend plus de coûts de licence ... surtout si vous voulez tout garder à jour
Pedro Braz
2
Évalué parce que je pense que c'est biaisé et évidemment inexact de dire qu'il n'y a pas une seule raison d'aller avec MySQL sur MSSQL. SQL Server Express a des limitations sévères que MySQL n'a pas, et aucun projet sérieux ne va utiliser Express, ce qui signifie que le problème de coût est toujours très valide. La plupart des plus grandes entreprises ont choisi MySQL / MariaDB plutôt que MSSQL. Personnellement, je le ferais aussi, pas seulement pour le problème des licences et des coûts, mais parce que d'après mon expérience, MySQL est beaucoup plus facile à utiliser. MySQL a tendance à fonctionner, alors que je me retrouve parfois à me battre avec MSSQL pour qu'il fasse ce que je veux.
dallin
7

Tout dans MySQL semble être fait plus près du métal que dans MSSQL, et la documentation le traite de cette façon. En particulier pour l'optimisation, vous devrez comprendre comment les index, la configuration du système et l'optimiseur interagissent dans diverses circonstances.

L '"optimiseur" est plus un analyseur. Dans MSSQL, votre plan de requête est souvent une surprise (généralement bon, parfois pas). Dans MySQL, il fait à peu près ce que vous lui avez demandé de faire, comme vous vous y attendiez. Ce qui signifie que vous devez vous-même avoir une compréhension approfondie des différentes façons dont cela pourrait être fait.

Pas construit autour d'un bon modèle TRANSACTION (moteur MyISAM par défaut).

La configuration du système de fichiers est votre problème.

Toute la configuration de la base de données est votre problème - en particulier les différentes tailles de cache.

Parfois, il semble préférable de le considérer comme un isam ad hoc et glorifié. Codd et Date n'ont pas beaucoup de poids ici. Ils le diraient sans embarras.

dkretz
la source
3
Cependant, MySQL moderne est par défaut Innodb, juste un point de clarification. Je pense qu'après 5,1 ou plus. Innodb prend en charge les transactions, les clés étrangères et le verrouillage au niveau des lignes par opposition au verrouillage au niveau de la table avec MyISAM.
Joseph Hamilton
4

@abdu

La principale chose que j'ai trouvée que MySQL a sur MSSQL est la prise en charge des fuseaux horaires - la possibilité de bien changer entre les fuseaux horaires, en respectant l'heure d'été est fantastique.

Comparez ceci:

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

aux contorsions impliquées dans cette réponse .

Pour ce qui est du commentaire «plus facile à utiliser», je dirais que le fait est qu'ils sont différents, et si vous en connaissez un, il y aura une surcharge dans l'apprentissage de l'autre.

Cebjyre
la source
En outre, le support ansi correct pour le group by, les colonnes d'horodatage automatiques, la pagination beaucoup plus simple ...
Joel Coehoorn
1
Le support du fuseau horaire de MySQL est significativement cassé, je ne pense pas que ce soit une fonctionnalité utile. Faites-le plutôt dans l'application.
MarkR
Je n'ai eu aucun problème avec la prise en charge du fuseau horaire, pouvez-vous entrer plus de détails ou fournir un lien s'il vous plaît?
Cebjyre
2
Pourquoi auriez-vous besoin de la prise en charge du fuseau horaire dans la base de données? Utilisez UTC partout et effectuez le rendu dans l'interface / interface graphique en utilisant le fuseau horaire local du système d'exploitation.
Tiberiu-Ionuț Stan
4

Les deux sont le serveur Product Sql de SGBD est une application commerciale tandis que MySql est une application open source.Les deux produits incluent des fonctionnalités similaires, mais le serveur SQL doit être utilisé pour une solution d'entreprise, tandis que mysql peut convenir à une implémentation plus petite.Si vous avez besoin d'une fonctionnalité comme la récupération, réplication, sécurité granalar et importante, vous avez besoin d'un serveur SQL

MySql prend moins d'espace sur le disque et utilise moins de mémoire et de processeur que le serveur SQL

prince
la source
3

Quelqu'un a une bonne expérience avec un "port" d'une base de données de SQL Server vers MySQL?

Cela devrait être assez douloureux! J'ai changé de version de MySQL de 4.x à 5.x et diverses instructions ne fonctionneraient plus comme avant. L'analyseur de requêtes a été "amélioré" de sorte que les instructions qui étaient précédemment réglées pour les performances ne fonctionneraient plus comme prévu.

La leçon tirée de l'utilisation d'une base de données MySQL de 500 Go: c'est un sujet subtil et tout autre chose mais trivial!

dlinsin
la source
2

@Cebjyre. L'IDE, que ce soit Enterprise Manager ou Management Studio, est meilleur que tout ce que j'ai vu jusqu'à présent pour MySQL. Je dis «plus facile à utiliser» car je peux faire beaucoup de choses en MSSQL là où MySQL n'a pas d'équivalent. Dans MySQL, je n'ai aucune idée de comment régler les requêtes en regardant simplement le plan de requête ou en regardant les statistiques. L'assistant de réglage d'index dans MSSQL prend l'essentiel du travail de conjecture sur les index manquants ou égarés.

Un inconvénient de MySQL est qu'il n'y a pas de taille maximale pour une base de données. La base de données augmenterait simplement de taille jusqu'à ce qu'elle remplisse le disque. Imaginez si ce disque partage des bases de données avec d'autres utilisateurs et que soudainement toutes leurs requêtes échouent parce que leurs bases de données ne peuvent pas croître. J'ai signalé ce problème à MySQL il y a longtemps. Je ne pense pas que ce soit encore réglé.

Abdu
la source
2
Par contre, j'ai été ennuyé par le fait que la console du studio de gestion ne respecte pas correctement undo (il est possible d'avoir une requête valide sur laquelle elle s'étouffe, car elle ne se rend pas compte que le texte a été mis à jour), et le manque d'onglet -expansion (par rapport au shell mysql). Il y a des inconvénients des deux côtés.
Cebjyre
1

Passant un peu de temps à travailler avec MySQL du POV de syntaxe MSSQL à MySQL, je me suis retrouvé limité dans ce que je pouvais faire.

Il y a des limites bizzare sur la mise à jour d'une table tout en réfrénant la même table lors d'une mise à jour.

De plus, UPDATE FROM ne fonctionne pas et la dernière fois que j'ai vérifié, ils ne prennent pas non plus en charge la syntaxe Oracle MERGE INTO. Cela a été un frein pour moi et j'ai arrêté de penser que j'arriverais à quelque chose avec MySQL après cela.


la source