MySQL和PostgreSQL对于初学者来说,有很大的区别吗?

31

像我这样的初学者,在使用基本的选择语句等方面,MySQL和PostgreSQL之间有很大的区别吗?还是主要区别在于使用更高级的查询?

6个回答

51
我通常建议在MySQL之前使用PostgreSQL的原因是,MySQL远离标准(SQL方面)。它不支持窗口函数(8.4版本)、公共表达式(8.4版本)、CHECK约束、EXCEPT/MINUS运算符,甚至是FULL OUTER JOINs等等。即使您可能从未听说过这些词,您在某个时候也必须使用这些概念。
我强烈建议您从PostgreSQL开始学习,然后您可以学习“真正”的SQL是什么。然后,您可以决定MySQL是否足够。
附言:我曾经用过MySQL,但后来我后悔了。现在我使用PostgreSQL并且很喜欢它。

好的,具体的信息。性能结果是针对PostgreSQL的,有时候拥有一个轻量级的SQL是个好主意,特别是如果你不需要额外的臃肿,但你仍然想要一些仍然是SQL的东西,而不是采用NoSQL数据存储范例。 - qdot
多年来,MySQL比PostgreSQL更快的神话已经不再成立。特别是自8.3版本以来,PostgreSQL在高事务写入场景下的扩展性更好。而且,当涉及到复杂语句时,优化器更加智能。使用MyISAM的MySQL可能仍然更快,但这样做就失去了像事务和(外键)约束等数据库管理系统的所有优势。 - user330315
EXCEPT是ANSI标准,而MINUS则不是。我很少看到需要使用FULL OUTER JOIN,因为可以使用更常见的OUTER JOIN和UNION来实现。我还要指出的是,你所说的PostgreSQL 8.4+,因为窗口/分析在PostgreSQL中相对较新。** 对于初学者来说,使用PostgreSQL最大的原因是因为MySQL在GROUP BY中有隐藏列 ** - OMG Ponies
2
我知道你可以模拟FULL OUTER JOIN(和EXCEPT),但是当你能使用它们时,语法会更清晰。关于PostgreSQL 8.4,你是正确的,我会编辑我的帖子。 - Vincent Savard
哇!我们成功地提供了相当多的信息 :) 我认为最大的收获是两种 SQL 真正针对不同的市场,而且都很值得学习。你首选哪个,取决于你的喜好;在现实世界中使用哪个,则取决于你的需求(是的,DBMS 很棒,但有时会过度使用..请参见我对另一个答案的评论 - 许多企业会根据需求使用两者)。 - qdot

26

已经有很多支持PostgreSQL的优点了,但我要再加一条:

PostgreSQL有最好的文档,比我用过的其他数据库产品都好。

这就是文档的亮点所在:

  • 它实际上教你SQL的基础知识
  • 易于理解
  • 有很好的示例
  • 非常好组织
  • 不仅仅是一个带有技术注释的功能列表
  • 总体来说,写得非常好

其他供应商应该为他们试图通过的文档感到羞耻。


2
每次我需要查找Sybase的相关信息时,我都想哭和尖叫。PostgreSQL的文档确实非常棒。 - Jay Kominek
文档链接在哪里? - aWebDeveloper
12
@WebDeveloper,你尝试过谷歌吗?它是“PostgreSQL文档”的第一个搜索结果。 - mikerobi

9

当你刚开始学习时,我认为你会更喜欢PostgreSQL的pgadminIII GUI工具,而不是我尝试过的MySQL的工具。然而,这可能只是我的个人偏好。

当你掌握基础知识后,你肯定想利用PostgreSQL从8.4版本开始支持的窗口函数

实际上,我建议使用PostgreSQL而不是MySQL,仅仅因为窗口函数。请注意,有方法在MySQL中模拟窗口函数。


2
我完全同意。而递归公共表达式只是更喜欢Postgres而不是MySQL的另一个原因。还有更好的标准兼容性...和检查约束...和可延迟约束... - user330315
我讨厌在MySQL中使用ctrl-c退出控制台。在psql中,它只是取消当前命令。 - Alexander Farber
缺乏窗口函数一直困扰着我 :( - nawfal

6
你经常听到 PostgreSQL 爱好者争辩说它是一个“真正”的 RDBMS,而 MySQL 不是。这种 snobbery 对于新手来说非常危险,因为它来自多年的特定经验,对某种特定个性类型产生了摩擦。如果从哪些知识对初学者最有益的角度来考虑,你会发现在野外使用 MySQL 的人比 PostgreSQL 要多得多。大型围绕开源软件构建的网站在 MySQL 和 PostgreSQL 之间选择 MySQL 的人数远远超过后者。
就我个人而言,我喜欢 MySQL,因为它适合我的开发风格 - 它只是完成任务。我不使用外键。我绝对不使用存储过程。但 MySQL 所做的事情,它做得很好,而且快速,并给了我一种愉快的“好吧,这很有道理”的感觉,这种感觉在使用 PostgreSQL 时我得不到(我广泛使用过两者)。MySQL 有良好的社区支持和优秀的文档。如果你需要进行复制(谁不需要?),那么 MySQL 显然是赢家,毫无疑问。
MySQL 允许你做一些事情,如果你转向不太友好的数据库,可能会导致坏习惯。但问题是 - 人们总是谈论如何准备随时跳转从 RDBMS X 到 RDBMS Y。以我的经验来看,这种情况很少发生,而且当它发生时,不同数据库之间总是存在奇怪的差异。MySQL 不同于 PostgreSQL,也不同于 Oracle,也不同于 SQL Server,也不同于 sqlite 等等。我使用过上述所有数据库,但我一直回到最容易和灵活地完成任务的那个 - MySQL。
DBAs 喜欢像编程语言爱好者一样抨击 PHP 一样打压 MySQL,但它们仍然生存和繁荣。这背后是有原因的 - 它们只是工作,只是完成任务。但最终你应该尝试所有这些,并自己做出决定。

2
你能详细解释一下“只是完成任务”是什么意思吗?对我来说,这听起来像是说:这是我遇到的第一件事情,我已经忍受了它。我个人使用PHP/MySQL,因为在我的脑海中这两个词是相互关联的。 - Intellix

4

3

PostgreSQL支持更高级的查询,对于复杂查询性能表现更好,但管理起来比较困难。

MySQL快速且易于管理,但在高级查询、存储过程等方面可能会受到其限制。

它们相似度足够高,我建议先从MySQL开始学习,同时也要学习PostgreSQL。


5
最近我尝试在Windows上安装PostgreSQL 9.0的最新安装程序。安装过程非常简便,同时也包括管理GUI工具pgADMIN。 - Peter G.
1
是的,但一旦你尝试进行主/从复制、集群等操作,就会变得棘手:(安装MySQL和PostgreSQL都很简单,但让它们高效运行却很麻烦。在实际应用中(我曾经为一个大型社交网络站点运营研发),两者都有用处——我们使用PostgreSQL处理复杂数据(社交信息、分析),而使用MySQL处理海量琐碎的非结构化数据(用户消息)。MySQL可以快速、轻松地进行复制和集群,并且维护起来也很容易。 - qdot

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