我读过虽然SQL是标准化的,但它与不同的数据库实现不同。我只使用MySQL作为数据库。
我想知道的是其他数据库共享相同的语法?我现在正在使用PDO,我想设置一个标志,允许用户指定他们想要使用的数据库。
我很想知道哪些是'安全'数据库,它们将处理大多数(如果不是全部)我的常规MySQL查询。主要是SELECT,INSERT,UPDATE,DROP,DELETE。
由于
答案 0 :(得分:3)
有一些名为ANSI SQL
的修订版。
所有主要的数据库引擎(Oracle
,MS SQL
,PostgreSQL
和MySQL
)理论上都应支持SQL-92
。
这包括您提到的所有内容:SELECT
,INSERT
,UPDATE
,DROP
,DELETE
,只要您不使用复杂内容与他们的条款。
在实践中:
并非所有数据库都支持全套SQL-92
。
即使在SQL
中编写跨平台SQL-92
也需要进行大量测试。
当您插入SQL
行并需要优化查询时,1001st
中的平台独立性会结束。
如果您浏览标记为StackOverflow
的{{1}}个问题,您会看到大多数人说“帮助我优化此查询”,大多数答案都说“使用此平台依赖的黑客”
答案 1 :(得分:1)
您会发现某些数据库存储数据类型不同,例如,mysql将布尔值存储为1和0,而postgres将它们存储为“t”和“f”。
只要您的数据库类知道转换数据的需要,您应该没问题,可能96.3482%的日常CRUD将全面运行。
即使您创建直接调用PDO的数据库类,您也可以稍后为数据转换或查询修改添加一些逻辑。
您可以使用数据库抽象层ADOdb。 (它得到了植物的渴望)
我建议您确保在花费大量时间开发可能不需要的功能之前,您的客户实际上已经知道他们需要运行哪个数据库。
答案 2 :(得分:0)
标准化SQL92在所有RDBMS中几乎相同。差异部分是标准没有定义的部分,例如LIMIT
或日期时间处理函数,当然还有程序语言。
至于受PHP欢迎的数据库:在MySQL,SQLite和PostgreSQL之间移植SQL并不难。使用Oracle,Sybase和DB / 2并不容易。