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