解释有关 SQL Server 与 MySQL 中过滤的声明

BS *_*mer 1 mysql sql-server sql-server-2016

我的公司正在进行 IT 大修,并考虑从 MS SQL Server(2016 标准版)转移到 MySQL 数据库(版本 5.6.10)。我已经使用 MS SQL Server 多年了,所以我很担心做出这个举动。基本上 - 我们的 IT 团队认为 MySQL 是免费的,并且只进行了一些语法更改。

我花了一天的时间阅读这些差异,老实说发现它们似乎非常相似。如果我要为 MS SQL Server 做一个案例 - 那么现在是时候去做了。一个关键细节——我们是一家分析公司,我们的 SQL 查询通常很复杂——所以我需要确保我们未来的 RDBMS 达到标准。

我多次遇到以下语句(关于过滤),我需要翻译。我对此的解释是,不可能使用单个查询来连接来自不同数据库的表。但是我看过 YouTube 视频,人们在 MySQL 中就是这样做的。请帮助我理解这种差异以及它是否重要。

MySQL 允许用户以多种方式过滤表、行和用户。但它需要用户按单个数据库过滤表、行或用户。在过滤数据时,开发人员必须通过运行多个查询来单独过滤数据库表。另一方面,SQL Server 使开发人员能够利用基于行的筛选。基于行的过滤选项按数据库方式过滤数据库上的数据。此外,过滤后的数据存储在单独的分发数据库中。因此,程序员在不考虑数据库数量的情况下过滤多行变得更加容易。

- MySQL 与 MS SQL Server 之间的比较

非常感谢您帮助破译引用的声明以及您看到的此举动的任何优点/缺点。谢谢!

Ric*_*mes 5

“很少有语法变化”——请原谅我笑了!SQL Server 有很多MySQL 没有的功能。任何此类的使用不仅仅是语法更改,还可能是查询重写。

TOP 10--> LIMIT 10-- 但只是大约。

ROW_NUMBER --> 不存在

SEQUENCE--> AUTO_INCREMENT-- 但只是大约

dbname.dbo.tablename --> dbname.tablename

哪个版本的 MySQL?MySQL 8.0 很有可能在 SQL Server 中使用一些更高级的功能。MariaDB 10.4 可能会更接近 SQL Server,因为它可以处理 MySQL 没有涵盖的一些不兼容性。

JOINing 在同一个 MySQL 实例上跨数据库从来都不是问题:

SELECT a.this, b.that
    FROM db1.tblx AS a
    JOIN db2.tbly AS b
    WHERE a.foo = 1
      AND b.blat < 5;
Run Code Online (Sandbox Code Playgroud)

JOINing跨同一服务器上的两个单独实例(MySQL 或 MariaDB),或单独服务器上的单独实例是一个问题。请参阅 MariaDB 的“连接”。您提供的引用使“数据库”一词含糊不清。(或者它被断章取意了。)我希望我通过添加“实例”这个词来表达清楚。

至于该链接的其余部分。它针对的是首席执行官,而不是我们这些必须进行过渡的咕噜声。太多的“挥手”和绒毛;没有肉。

我还没有弄清楚“基于行的过滤”是什么意思。也许它是 SQL Server 中的一个时髦功能。但也许您的代码没有使用它。

开始一个新问题并在其中发布“如何将此查询更改为 MySQL”以及一个非平凡但典型的查询。您可能会看到我上面提到的 4 种不兼容中的一些,或者可能有其他事情等待转换。