【问题标题】:Differences between MySQL and SQL Server [closed]MySQL和SQL Server之间的差异[关闭]
【发布时间】:2010-09-05 20:29:09
【问题描述】:

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

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

MySQLSQL Server 之间的主要区别是什么?在MySQL 中使用stored procedures 是一种常见的做法吗?

您有什么建议或资源可以帮助我进行转换吗?

对于这两者都有经验的人,MySQL 中是否缺少任何功能?

【问题讨论】:

    标签: mysql sql-server tsql


    【解决方案1】:

    您必须注意的一件事是 SQL Server 和 MySQL 实现 SQL 语法的方式存在相当严重的差异。

    这是一个不错的Comparison of Different SQL Implementations

    例如,看一下 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
    

    【讨论】:

    • 和oracle也不一样:select * from (select age from person order by ago asc) where rownum
    • 刚刚碰到这个。阅读所有差异让我感到畏缩。基础是相同的(至少在理解方面),但细节却非常非常不同。
    • 可能是一个愚蠢的评论,但为什么不能有 1 种 sql 语言??...有不同的 html 吗??...那么为什么不是 1 种 sql。
    • @greaterKing HTML 是由委员会/联盟制定的一套结构和标准,SQL.. 不是,它只是一种脚本语言,唯一的所有者是解释器的开发者。它在某种程度上有点像 Javascript,每个浏览器都有自己的 JS 引擎和自己的脚本解释方式。只有在来自社区的巨大压力下,才能将这种语言带入某种团结的努力已经到位。但是伙计,我希望它们都非常相似,只有微小的差异
    • T-SQL 翻译为 Transact-SQL ;) Sql Server 包含语言 (T-SQL) 但它是一个整体软件,具有 GUI,可在本地和通过网络等处理请求。跨度>
    【解决方案2】:

    这里的许多 cmets 听起来更像是宗教论点,而不是现实生活中的陈述。 我已经使用 MySQL 和 MSSQL 多年,它们都是很好的产品。 我会主要根据您正在使用的环境选择 MySQL。大多数开源项目都使用 MySQL,所以如果你朝这个方向发展,MySQL 是你的选择。如果您使用 .Net 开发一些东西,我会选择 MSSQL,不是因为它更好,而是因为大多数人都使用它。 我实际上目前正在使用带有 MySQL 和 C# 的 ASP.NET 的项目。它工作得很好。

    【讨论】:

    • 严格来说,您不认为没有像 MS SQL 这样的东西。存在的东西是“MS SQL Server”。
    • 我相信你知道的比我多。我只是一个初学者,如果我弄错了,你能告诉我吗?有什么和 MS SQL 一样的东西吗?
    • 我不确定你在问什么?
    • 没错。 Microsoft SQL Server 2012 或您使用的任何版本。
    • 如今的编程都是关于首字母缩略词的。让我们以您谈论Lamp Stack 为例。很多人可能只会说 LAMP 或 WAMP。同样,我们没有说 Microsoft SQL Server,而是将其改为 MS SQL Server 到 MS SQL 到 MSSQL
    【解决方案3】:

    我不敢相信没有人提到 MySQL 不支持公用表表达式 (CTE) / "with" 语句。这是一个非常烦人的区别。

    【讨论】:

    • 我使用过 CTE 和临时/变量表。与后两者相比,使用 CTE 有什么好处?
    • @Jared 使用 CTE 使代码保持可读性,因为您不需要定义临时表及其列类型,并且通过使用 cte,您甚至可以获得列类型和名称的智能感知,即使您没有t 指定它们。
    • 递归是一个需要提及的好处。
    • Mysql 8 支持 CTE
    • 所以mysql现在也获得了语法糖果。
    【解决方案4】:

    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

    【讨论】:

    • myIsam 是为了快速响应,它没有强制外键签入的理由来更快。如果做一些更严重的事情,请尝试使用 InnoDB 引擎。我在使用 MS Access 时遇到了一些非常糟糕的问题,不能原谅他们的这种不负责任,所以我不偏爱 MS 的任何数据库,让他们做操作系统,并为开源社区提供严肃的业务......虽然你不能自从甲骨文超越 MySQL 以来,一切都确定了......
    • 很公平,但是忽略基于 Access 的 Microsoft 数据库是愚蠢的。 Access 它是一个桌面数据库,与 SQL Server 无关。你知道 StackOverflow 在 SQL Server 上运行,对吧?
    • @JonGalloway:嗨,我是初学者。我只想知道严格来说我们有什么作为 MS SQL 的。我认为存在的是 MS SQL Server。你能澄清一下吗?它可能是一个常用词,因此您可能将其用作 MS SQL,并且对每个人都有意义。但我是一个初学者,所以我有点用术语来理解这个概念。请告诉我你说的是 MS SQL 还是 MS SQL Server?
    • 当人们说 MSSQL、TSQL 时,他们通常指的是 Microsoft SQL Server 产品附带的 SQL 或事务 SQL (TSQL) 语言。这应该不难发现。继续阅读en.wikipedia.org/wiki/Microsoft_SQL_Server
    【解决方案5】:

    坦率地说,我找不到使用 MySQL 而不是 MSSQL 的单一理由。以前的问题是成本问题,但 SQL Server 2005 Express 是免费的,并且有很多网络托管公司提供完整的 sql server 托管服务,每月不到 5.00 美元。

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

    【讨论】:

    • 我认为价格是选择 MySQL 而不是 MSSQL 的唯一真正原因。当然,有一些廉价的 MSSQL 托管,但很少见,而且通常在存储方面受到严重限制。
    • 我会说许可是使用 MySQL 的一个很好的理由。
    • Group_concat 和 REGEXP 是使用 MySQL 而不是 SQL Server 的充分理由(即使切换了两个许可证)
    • 我选择 MySQL 的另一个原因是,如果您想要一个本地数据库并且选择 MS SQL Server,则您必须运行 Windows 机器,这包括更多的许可成本......特别是如果你想让它保持最新
    • 投了反对票,因为我认为说没有一个理由使用 MySQL 而不是 MSSQL 是有偏见的,而且显然是不准确的。 SQL Server Express 有 MySQL 所没有的严重限制,并且没有严肃的项目会使用 Express,这意味着成本问题仍然非常有效。大多数最大的公司都选择了 MySQL/MariaDB 而不是 MSSQL。就我个人而言,我也愿意,不仅仅是因为许可和成本问题,而是因为根据我的经验,MySQL 更容易使用。 MySQL 倾向于正常工作,而我发现自己偶尔会与 MSSQL 斗争以让它做我想做的事情。
    【解决方案6】:

    在 MySQL 中的一切似乎都比在 MSSQL 中更接近金属,并且文档是这样处理的。特别是对于优化,您需要了解索引、系统配置和优化器在各种情况下的交互方式。

    “优化器”更像是一个解析器。在 MSSQL 中,您的查询计划通常是一个惊喜(通常是好的,有时不是)。在 MySQL 中,它几乎按照您期望的方式执行您要求它执行的操作。这意味着您自己需要对可能完成的各种方式有深入的了解。

    不是围绕良好的 TRANSACTION 模型(默认 MyISAM 引擎)构建的。

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

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

    有时最好将其视为临时的、美化的 isam。 Codd 和 Date 在这里没有太大的分量。他们会毫不尴尬地说出来。

    【讨论】:

    • 现代 MySQL 默认使用 Innodb,只是为了澄清一点。我想在5.1左右之后。 Innodb 确实支持事务、外键和行级锁定,而不是 MyISAM 的表级锁定。
    【解决方案7】:

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

    MySQL 5.0 Download page 对此进行了详细说明。

    【讨论】:

      【解决方案8】:

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

      this answer 涉及的扭曲。

      至于“更易于使用”的评论,我想说的是它们是不同的,如果你知道一个,学习另一个就会有开销。

      【讨论】:

      • 另外,正确支持分组依据、自动时间戳列、更简单的分页...
      • MySQL 的时区支持被严重破坏,我不认为这是一个有用的功能。而是在应用程序中执行此操作。
      • 我在时区支持方面没有遇到任何问题,您能否详细介绍一下或提供链接?
      • 为什么需要数据库中的时区支持?在任何地方使用 UTC 并使用操作系统的本地时区在前端/gui 中呈现。
      【解决方案9】:

      两者都是 DBMS 的产品 Sql server 是一个商业应用程序,而 MySql 是一个开源应用程序。两个产品都包含类似的功能,但是 sql server 应该用于企业解决方案,而 mysql 可能适合较小的实现。如果您需要功能像恢复,复制,粒度安全和重要,你需要 sql server

      MySql 比 sql server 占用更少的磁盘空间,使用更少的内存和 cpu

      【讨论】:

        【解决方案10】:

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

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

        从使用 500GB 的 MySQL 数据库中吸取的教训:这是一个微妙的话题,其他任何事情都不是微不足道的!

        【讨论】:

          【解决方案11】:

          @Cebjyre。无论是 Enterprise Manager 还是 Management Studio,IDE 都比我迄今为止看到的任何 MySQL IDE 都要好。我说“更容易使用”是因为我可以在 MSSQL 中做很多事情,而 MySQL 没有对应物。在 MySQL 中,我不知道如何通过简单地查看查询计划或查看统计信息来调整查询。 MSSQL 中的索引调优向导对丢失或错位的索引进行了大部分猜测工作。

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

          【讨论】:

          • 另一方面,我一直对管理工作室控制台不正确地尊重撤消感到恼火(它可能有一个有效的查询,因为它没有意识到文本已经更新),并且缺少选项卡扩展(与 mysql shell 相比)。双方都有缺点。
          【解决方案12】:

          花了一些时间使用 MySQL,从 MSSQL 到 MySQL 语法 POV,我一直发现自己的能力有限。

          在更新期间引用同一个表时更新表有一些奇怪的限制。

          另外 UPDATE FROM 不起作用,上次我检查它们也不支持 Oracle MERGE INTO 语法。这对我来说是一场表演,我不再认为在那之后我会用 MySQL 取得任何进展。

          【讨论】:

            猜你喜欢
            • 2011-06-24
            • 2011-06-18
            • 2014-06-09
            • 2023-03-08
            • 1970-01-01
            • 2014-11-03
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多