MySQL和SQL Server之间的差异


144

我是一位ASP.NET开发人员,已经Microsoft SQL Server满足了我的所有数据库需求(无论是在工作中还是在个人项目中)。

我正在考虑为我的一些个人项目尝试使用LAMP堆栈。

MySQL和之间的主要区别是SQL Server什么?使用存储过程是一种常见的做法MySQL吗?

您是否有任何建议或资源可以帮助我进行转换?

对于两者都有经验的人,有没有缺少的功能MySQL

Answers:


139

您需要注意的一件事是,SQL Server和MySQL实现SQL语法的方式存在相当大的差异。

是不同SQL实现的很好的比较

例如,看一下top-n部分。在MySQL中:

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

在SQL Server(T-SQL)中:

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

27
和oracle也不同:select * from(从以前的asc的人中选择年龄),其中rownum <= 3返回ANSI SQL,一切都被原谅了:)
gbjbaanb

9
刚遇到这个。了解所有差异使我感到畏缩。基本知识是相同的(至少在理解方面),但是具体知识却非常非常不同。
JasCav 2010年

21
也许是愚蠢的注释,但是为什么不能有1个sql语言?
国王

4
@greaterKing HTML是由委员会/财团制定的结构和标准,SQL并非如此。它只是一种脚本语言,唯一的所有者是解释器的开发人员。在某种程度上,它就像是Javascript,每个浏览器都有自己的JS引擎和解释脚本的方式。只有在社区的巨大压力下,人们才努力将这种语言带入某种形式的团结。但是,我希望他们都非常相似,只有一
点点

2
T-SQL转换为的Transact-SQL;)在SQL Server包括语言(T-SQL),但它是一个软件作为一个整体,具有图形用户界面,操作和本地网络通过申请等
Botond拜尔陶隆

48

这里的许多评论听起来更像是宗教辩论,而不是现实生活中的陈述。我已经使用MySQL和MSSQL多年,并且都是不错的产品。我会主要根据您正在使用的环境来选择MySQL。大多数开放源代码项目都使用MySQL,因此,如果朝这个方向发展,则选择MySQL。如果您使用.Net进行开发,我会选择MSSQL,不是因为它要好得多,而是导致大多数人使用它。我目前实际上在一个将ASP.NET与MySQL和C#结合使用的项目中。它工作得很好。


3
严格来说,您是否认为没有类似MS SQL的产品。存在的是“ MS SQL Server”。
2015年

我相信你比我了解的更多。我只是一个初学者,如果我弄错了,可以让我知道吗?有什么确切的MS SQL?
2015年

2
我不确定你在问什么?
雷米

3
那是正确的。Microsoft SQL Server 2012或您使用的任何版本。
雷米2015年

5
如今,编程全都与首字母缩写有关。让我们以您谈论的示例为例Lamp Stack。很多人可能只会说LAMP或WAMP。同样,我们没有说是Microsoft SQL Server,而是使它成为了MS SQL Server到MS SQL到MSSQL
ytpillai

23

我无法相信,没有人提到MySQL不支持通用表表达式(CTE)/“ with”语句。这是一个非常烦人的区别。


我已经使用了CTE和临时表/变量表。与后两者相比,使用CTE有什么好处?
杰瑞德(Jared)

8
@Jared使用CTE使代码保持可读性,因为您不需要定义临时表及其列类型,使用cte甚至即使您未指定它们也能获得列类型和名称的智能感知。
Aleks 2014年

9
递归是一个值得一提的好处。
Faiz 2015年

2
Mysql 8支持CTE
Ivanzinho

因此,mysql现在也获得了语法糖果。
TheLegendaryCopyCoder

15

MySQL更有可能出现数据库损坏问题,并且不会在发生问题时自动修复它们。从6.5版开始,我就使用MSSQL,并且不记得使数据库脱机的数据库损坏问题。几次在生产环境中使用MySQL时,数据库损坏问题使整个数据库脱机,直到我们从命令行运行魔术“请修复损坏的索引”。

以我的经验,MSSQL的事务和日记系统几乎可以处理任何事情-包括电源重启或硬件故障-不会损坏数据库,并且如果出现问题,它会自动修复。

这是我的经验,很高兴得知此问题已解决或我们做错了。

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是用于真正快速响应的,它并没有为了更快地进行强制外键检查。如果做得更严重,请尝试使用InnoDB引擎。我在使用MS Access时遇到了一些非常棘手的问题,无法原谅这些不负责任的行为,因此我不赞成使用任何MS的数据库,让它们使用OS并为开源社区提供严肃的业务...尽管您不能甲骨文已经超越了MySQL
肯定。.– ante.sabo 2010年

8
足够公平,但是忽略基于Access的Microsoft数据库是很愚蠢的。Access是一个桌面数据库,与SQL Server无关。您知道StackOverflow在SQL Server上运行,对吗?
乔恩·加洛韦

@JonGalloway:嗨,我是一个初学者。我只想严格地说,我们有什么像MS SQL一样的东西。我认为存在的是MS SQL Server。您能在这方面澄清一下吗?这可能是一个常用词,所以您可能已将其用作MS SQL,并且对每个人都有意义。但是我是一个初学者,所以我有点迷上术语来理解这个概念。请让我知道您在说的是MS SQL还是MS SQL Server?
2015年

1
人们所说的MSSQL,TSQL通常是指Microsoft SQL Server产品附带的SQL或事务SQL(TSQL)语言。这应该不难发现。在en.wikipedia.org/wiki/Microsoft_SQL_Server上
Faiz


7

坦白说,我找不到使用MySQL而不是MSSQL的单一原因。以前的问题以前是花钱的,但是SQL Server 2005 Express是免费的,并且有许多网络托管公司提供每月少于5.00美元的SQL Server完全托管。

MSSQL易于使用,并且具有MySQL中不存在的许多功能。


2
我认为价格是选择MySQL而不是MSSQL的唯一真正原因。当然,有一些便宜的MSSQL托管,但它很少见,而且通常在存储上受到严重限制。
Craig

21
我会说许可是MySQL很好的理由。
麦克博士(Mike)

3
Group_concat和REGEXP是在SQL Server上使用MySQL的充分理由(即使已更改两个许可证)
Michele

1
我要使用MySQL的另一个原因是,如果您要使用本地数据库,而要使用MS SQL Server,则必须运行Windows计算机,其中包括更多的许可费用...尤其是如果要保留所有这些内容最新
Pedro Braz

2
投反对票是因为我认为使用偏重于MSSQL的MySQL没有单一理由,这显然是不正确的。SQL Server Express具有MySQL所没有的严格限制,并且没有认真的项目要使用Express,这意味着成本问题仍然非常有效。大多数最大的公司都选择了MySQL / MariaDB而不是MSSQL。就我个人而言,我不仅会考虑许可和成本问题,而且因为以我的经验,使用MySQL会容易得多。MySQL趋向于正常运行,而我发现自己偶尔会与MSSQL争斗以使其能够执行我想要的操作。
达林

7

MySQL中的一切似乎都比MSSQL更接近金属,并且文档以这种方式对待它。尤其是对于优化,您需要了解索引,系统配置和优化器在各种情况下如何交互。

“优化器”更多是解析器。在MSSQL中,您的查询计划通常令人惊讶(通常很好,有时不是)。在MySQL中,它几乎按照您的期望做事。这意味着您自己需要对可能的各种方式有深刻的了解。

并非围绕良好的TRANSACTION模型(默认为MyISAM引擎)构建。

文件系统设置是您的问题。

所有数据库配置都是您的问题-尤其是各种缓存大小。

有时似乎最好将其视为临时的,荣耀的isam。此处的Codd和Date不太重要。他们会毫不尴尬地说。


3
不过,现代MySQL默认将Innodb设置为默认值,这只是一个澄清点。我认为在5.1左右之后。Innodb确实支持事务,外键和行级别锁定,而不是使用MyISAM进行表级别锁定。
约瑟夫·汉密尔顿


4

@abdu

我发现MySQL在MSSQL之上具有的主要优势是对时区的支持-能够在时区之间进行很好的更改,并且尊重夏时制,这一点太棒了。

比较一下:

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

这个答案所涉及的扭曲

至于“更易于使用”的评论,我想说的是,它们是不同的,如果您知道其中一个,则学习另一个会产生开销。


此外,正确的分组支持,自动时间戳列,更简单的分页的ansi支持...
Joel Coehoorn's

1
MySQL的时区支持已被严重破坏,我认为这不是有用的功能。而是在应用程序中执行此操作。
MarkR

我在时区支持方面没有任何问题,能否请您提供更多详细信息或提供链接?
Cebjyre

2
为什么在数据库中需要时区支持?随处使用UTC,并使用操作系统的本地时区在前端/ GUI中进行渲染。
Tiberiu-Ionuț Stan,

4

两者都是DBMS的产品Sql服务器是一个商业应用程序,而MySql是一个opensouces应用程序。这两个产品都包含类似的功能,但是sql服务器应用于企业解决方案,而mysql可能适合较小的实现。如果您需要恢复等功能,复制,真正的安全性和重要性,您需要sql server

与SQL Server相比,MySql占用更少的磁盘空间,并使用更少的内存和cpu


3

任何人都有从SQL Server到MySQL的数据库“端口”的良好经验吗?

这应该是很痛苦的!我将MySQL的版本从4.x切换到了5.x,各种语句不再像以前那样工作了。查询分析器得到了“改进”,因此以前针对性能进行调整的语句将无法按预期工作。

从使用500GB MySQL数据库获得的经验教训:这是一个微妙的话题,除了琐碎的事!


2

@Cebjyre。无论是企业管理器还是Management Studio,IDE都比我迄今为止所见的MySQL更好。我说“易于使用”是因为我可以在MSSQL中做很多事情,而MySQL没有同行。在MySQL中,我不知道如何仅通过查看查询计划或查看统计信息来优化查询。MSSQL中的索引调整向导可以对丢失或放错哪些索引进行大多数猜测。

MySQL的一个缺点是数据库没有最大大小。数据库的大小只会增加,直到填满磁盘为止。想象一下,如果该磁盘正在与其他用户共享数据库,并且突然所有用户的查询都失败了,因为他们的数据库无法增长。我很久以前就向MySQL报告了此问题。我认为还没有解决。


2
另一方面,Management Studio控制台使我烦恼,因为它不正确地考虑撤消操作(可能有一个有效的查询被阻塞,因为它没有意识到文本已被更新),并且缺少制表符-expansion(与mysql shell相比)。双方都有缺点。
Cebjyre

1

从MSSQL到MySQL语法POV,我花了一些时间与MySQL一起工作,但我发现自己无法做些什么。

在更新过程中,在刷新同一张表的同时,存在对表的双重限制。

另外,UPDATE FROM不起作用,上次我检查它们也不支持Oracle MERGE INTO语法。这对我来说是个秀场止步器,在那之后我不再以为MySQL可以帮助我。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.