SQL差异的原因

时间:2008-09-01 04:11:43

标签: sql sql-server postgresql

尽管SQL标准存在于SQL,为什么SQL发行版如此非标准? SQL数据库的工作方式确实存在很多有意义的差异,还是我一直在使用的两个数据库:MS-SQL和PostgreSQL?为什么会出现这些差异?

5 个答案:

答案 0 :(得分:8)

ANSI标准仅指定一组有限的命令和数据类型。一旦超越这些,实现者就会独立完成。并且根本没有指定一些非常重要的概念,例如自动递增列。 SQLite只选择第一个非空整数,MySQL需要AUTO INCREMENT,PostgreSQL使用序列等等。这是一个混乱,而且这只是在OSS数据库中!尝试让Oracle,Microsoft和IBM共同决定一些棘手的功能。

答案 1 :(得分:5)

这是“隐形锁定”的一种形式。乔尔在这里详细介绍:

公司最终将其业务功能与其实施中的非标准或奇怪的不受支持的功能捆绑在一起,这限制了他们从供应商转移到竞争对手的能力。

另一方面,这是非常短视的,因为任何半脑的人都倾向于抽象掉专有作品,或者如果它过于严重则完全避免锁定。

答案 2 :(得分:5)

首先,我发现数据库不兼容浏览器或操作系统。任何经过几个小时训练的人都可以开始对任何SQL数据库进行选择,插入,删除和更新。同时,很难编写在每个浏览器上呈现相同的HTML或为多个操作系统编写系统代码的HTML。通常,SQL的差异与性能或相当深奥的功能有关。主要的例外似乎是日期格式和功能。

其次,数据库开发人员通常有动力添加使其产品与其他人区别开来的功能。 Oracle,MS SQL Server和MySQL等产品是一个庞大的生态系统,很少在实践中交叉授粉。在我的工作场所,我们使用Oracle和MySQL,但如果需要或需要,我们可能会在大约一天内切换到100%Oracle。所以我非常关心Oracle在每个版本中为我们提供的闪亮玩具,但我甚至不知道我们使用的MySQL版本。就我们而言,IBM,微软,PostgreSQL以及其余部分可能都不存在。拥有获取和保留客户和用户的功能远比数据库世界中的兼容性重要得多。 (我想,这是“锁定”答案的积极旋转。)

第三,不同公司以不同方式实施SQL的正当理由。例如,Oracle有一个多版本系统,允许非常快速和可扩展的一致读取。其他数据库缺少该功能,但通常更快插入行和回滚事务。这是这些系统的根本区别。它不会比另一个更好(至少在一般情况下),只是不同。如果数据库引擎的SQL ontop利用其优势并尝试最小化其弱点,那么不应该感到惊讶。事实上,开发人员不这样做是不负责任的。

答案 3 :(得分:4)

John:标准实际上涵盖了许多主题,包括标识列,序列,触发器,例程,upsert等。但是,当然,许多这些标准组件可能比第一个实现更晚到位;这通常可能是SQL标准合规性有些低的原因。

Neall:实际上,SQL标准领先于实现。例如,拥有CREATE ASSERTION会很好,但据我所知,没有DBMS实现断言。

就我个人而言,我认为某些ISO标准(如SQL标准)的封闭性是问题的一部分:当一个标准在网上不易获得时,实施者/规划者不太可能知道它,而且很少客户要求合规,因为他们不知道要求什么。

答案 4 :(得分:2)

正如1800所说,这肯定是有效的锁定。但是,为了公平对待数据库供应商,SQL标准总是在追赶当前数据库的功能集。我们今天拥有的大多数数据库都是非常古老的血统。如果你追溯到微软SQL Server的根源,我想你会找到Ingres--这是70年代写的第一个关系数据库之一。而Postgres最初是由80年代的一些人作为Ingres的继承人写的。 Oracle回过头来,我不确定MySQL的位置。

数据库不可移植性很糟糕,但可能会更糟糕。