MySQL和SQL Server之间的区别

150

我是一名 ASP.NET 开发人员,无论是在工作中还是个人项目中,我都使用 Microsoft SQL Server 来满足我的所有数据库需求。

我正在考虑尝试使用 LAMP 技术栈来处理我的一些个人项目。

MySQLSQL Server 之间有哪些主要区别?在 MySQL 中使用 存储过程 是一个常见的做法吗?

你能推荐一些帮助我进行转换的建议或资源吗?

对于那些有着双重经验的人,MySQL 是否存在任何缺失的功能呢?

12个回答

143

需要注意的一件事是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

28
Oracle也不同: 选择*从(选择年龄从人员排序ago asc)其中rownum <= 3 回来ANSI SQL,一切都被原谅了 :) - gbjbaanb
10
刚刚看到这个。阅读所有的不同之处让我感到很不舒服。基本原理是相同的(至少在理解方面),但具体细节却非常非常不同。 - JasCav
22
或许这是一个愚蠢的评论,但为什么不能只有一种SQL语言呢?难道会有不同的HTML吗?既然如此,为什么不能只有一种SQL语言呢? - greaterKing
6
HTML是由委员会/联盟制定的一组结构和标准,而SQL不是。它只是一种脚本语言,其唯一所有者是解释器的开发者。在某种程度上,这有点像JavaScript,每个浏览器都有自己的JS引擎和解释脚本的方式。只有通过来自社区的压力,才有努力使该语言达成一些统一性的努力。但我真希望它们都非常相似,只有一些小的差异。 - RedactedProfile
1
SQL Server 如何与 T-SQL 相关?T 代表什么意思? - Kellen Stuart
2
T-SQL 转换为 Transact-SQL ;)Sql Server 包括语言(T-SQL),但它是一个整体软件,具有 GUI、本地和网络请求处理等功能。 - Botond Bertalan

49

这里的许多评论听起来更像是宗教争论而不是现实生活陈述。我曾与MySQL和MSSQL一起工作多年,两者都是优秀的产品。我会根据你所工作的环境选择MySQL。大多数开源项目使用MySQL,因此如果您选择该方向,则应选择MySQL。如果您使用.Net开发某些东西,我会选择MSSQL,不是因为它更好,而是因为大多数人使用它。我目前正在一个使用ASP.NET、MySQL和C#的项目上工作,它运行得很好。


3
严格来说,您不认为没有像 MS SQL 这样的东西。存在的是“MS SQL Server”。 - Unbreakable
2
我不确定你在问什么? - Remy
我想说的是,我认为“MS SQL”不是正确的技术术语。关系型数据库管理系统应该被称为“MS SQL Server”,而不仅仅是“MS SQL”。 - Unbreakable
3
没问题。Microsoft SQL Server 2012或者你使用的任何版本都可以。 - Remy
5
现在编程与缩写词紧密相关。让我们以谈论“Lamp Stack”为例。很多人可能只说LAMP或WAMP。同样地,我们把Microsoft SQL Server简称为MS SQL Server,缩短为MS SQL或MSSQL。 - rassa45
显示剩余2条评论

23

我无法相信没有人提到 MySQL 不支持通用表达式 (CTE) / "with" 语句。这是一个相当令人烦恼的区别。


我既使用过CTE,也使用过临时/变量表。相比后两者,使用CTE的好处是什么? - Jared
8
@Jared 使用CTE可以使代码更易读,因为您不需要定义临时表及其列类型。通过使用CTE,即使您没有指定列类型和名称,您甚至可以获得列类型和名称的智能感知。 - Aleks
9
递归是一个值得一提的好处。 - Faiz
3
MySQL 8 支持 CTE。 - user2188550
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的数据库,让他们去做操作系统,并将严肃的业务交给开源社区...虽然你不能确定任何事情,因为Oracle已经接管了MySQL... - ante.sabo
8
可以,但忽略基于Access的Microsoft数据库是愚蠢的。Access是桌面数据库,与SQL Server无关。你知道StackOverflow在运行SQL Server,对吧? - Jon Galloway
@JonGalloway:你好,我是一个初学者。我只想知道严格来说,我们是否有MS SQL这样的东西。我认为存在的是MS SQL Server。你能否请澄清一下。它可能是一个常见的词,所以你可能已经使用了MS SQL,并且对每个人都有意义。但我是一个初学者,所以我对术语有点固执,以便理解概念。请告诉我你所说的是MS SQL还是MS SQL Server? - Unbreakable
1
当人们说MSSQL、TSQL时,通常指的是随Microsoft SQL Server产品提供的SQL或事务SQL(TSQL)语言。这应该不难找到。请阅读https://en.wikipedia.org/wiki/Microsoft_SQL_Server。 - Faiz
@JonGalloway 这是参考链接: https://stackoverflow.blog/2008/09/what-was-stack-overflow-built-with/ - Moayad Hani Abu Rmilah

8
MySQL似乎比MSSQL更接近于底层,文档也是如此。特别是在优化方面,您需要了解索引、系统配置和优化器在不同情况下的相互作用。
“优化器”更像是一个解析器。在MSSQL中,查询计划通常会让你惊喜(通常是好的,有时不是)。在MySQL中,它基本上会按照您要求的方式执行,就像您期望的那样。这意味着您自己需要深入了解它可能被执行的各种方式。
没有建立在良好的事务模型上(默认的MyISAM引擎)。
文件系统设置是您的问题。
所有数据库配置都是您的问题 - 特别是各种缓存大小。
有时最好将其视为一个特殊的、赞美的isam。Codd和Date在这里并不重要。他们会毫不尴尬地这么说。

4
现代MySQL默认使用Innodb作为存储引擎,这只是一个澄清的点。我想是在5.1版本之后。相较于MyISAM的表级锁定,Innodb支持事务、外键和行级锁定。 - Joseph Hamilton

7

坦白地说,我找不到一个使用MySQL而不是MSSQL的理由。以前的问题曾经是成本,但SQL Server 2005 Express是免费的,有很多网页托管公司提供完整的托管服务并且价格低于每月$5.00。

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


2
我认为价格是选择MySQL而不是MSSQL的唯一真正原因。当然,有一些廉价的MSSQL托管服务,但这很少见,并且通常在存储方面受到严重限制。 - Craig
21
我会说许可证是选择MySQL的一个很好的理由。 - Dr. Mike
3
使用MySQL而不是SQL Server的足够理由是Group_concat和REGEXP(即使两者的许可证被交换),这两个功能已经足够了。 - Michele
1
我选择MySQL的另一个原因是,如果你想要本地数据库并且选择了MS SQL Server,那么你必须运行Windows机器,这包括更多的许可证成本......特别是如果你想保持所有内容都是最新的。 - Pedro Braz
2
因为我认为说没有任何理由选择MySQL而不是MSSQL是有偏见和明显不准确的,所以我给它点了踩。SQL Server Express有严重的限制,而MySQL没有,没有一个严肃的项目会使用Express,这意味着成本问题仍然非常重要。大多数最大的公司选择MySQL/MariaDB而不是MSSQL。就个人而言,我也会这样做,不仅因为许可证和成本问题,而且因为在我的经验中,MySQL更容易使用。MySQL往往只需要工作,而我发现自己偶尔需要与MSSQL斗争才能让它按照我的意愿工作。 - dallin
显示剩余8条评论

6

我认为需要注意的一点是,MySQL 5.0之前的版本没有视图、触发器和存储过程。

更多相关信息可以在MySQL 5.0下载页面中了解。


5

两者都是数据库管理系统产品,Sql Server 是商业应用程序,而 MySql 是开源应用程序。两个产品包含类似的功能,但是 Sql Server 应该用于企业解决方案,而 MySql 可能适合较小的实现。如果您需要恢复、复制、粒度安全和重要功能等功能,则需要 Sql Server。

MySql 占用磁盘空间较少,并且使用的内存和 CPU 也比 Sql Server 少。


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

请参考这个答案,以解决在IT技术中涉及的扭曲问题。

至于“更易使用”的评论,我认为重点是它们是不同的,如果你了解其中一个,学习另一个将会有一定的开销。


此外,对于分组操作的 ANSI 支持、自动时间戳列以及更简单的分页功能进行了修正。 - Joel Coehoorn
1
MySQL的时区支持存在严重问题,我认为这不是一个有用的功能。应该在应用程序中解决这个问题。 - MarkR
我在时区支持方面没有遇到任何问题,您可以提供更多详细信息或链接吗? - Cebjyre
2
为什么需要数据库中的时区支持?在所有地方使用UTC,并在前端/ GUI中使用操作系统的本地时区进行渲染。 - oxygen

3
有人用过将SQL Server的数据库转移到MySQL的“端口”吗?
这应该相当痛苦!我从MySQL 4.x切换到5.x版本,各种语句不再像以前那样工作了。查询分析器被“改进”,以前为了性能而进行调整的语句现在不再按预期工作。
在使用500GB MySQL数据库的过程中所学到的教训是:这是一个微妙的话题,绝非琐碎!

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接