【问题标题】:List of common SQL queries for Open Source databases?开源数据库的常见 SQL 查询列表?
【发布时间】:2012-09-10 20:26:27
【问题描述】:

我正在尝试查找有关 MySQL、PostgreSQL、SQLite 等开源数据库的正确 RDBMS SQL queries 的信息。他们是否有任何预先组装的列表,或者我只需要梳理每个数据库引擎的文档(在某些情况下猜测正确的实现?ALTER TABLE vs CREATE INDEX

例如,到目前为止,我有这个 MySQL 的(部分)列表:

CREATE TABLE `%s` (...);
DROP TABLE IF EXISTS `%s` %s;
ALTER TABLE `%s` RENAME TO `%s`;

ALTER TABLE `%s` ADD COLUMN %s;
ALTER TABLE `%s` DROP COLUMN `%s` %s;
ALTER TABLE `%s` RENAME COLUMN `%s` to `%s`;

ALTER TABLE `%s` ADD CONSTRAINT `%s` FOREIGN KEY (`%s`) REFERENCES `%s` (`%s`) ON DELETE CASCADE ON UPDATE CASCADE;
ALTER TABLE `%s` ADD CONSTRAINT `%s` UNIQUE (`%s`);
ALTER TABLE `%s` DROP CONSTRAINT `%s` %s;

CREATE INDEX `%s` USING BTREE ON `%s` (`%s`);
DROP INDEX IF EXISTS `%s` %s;

【问题讨论】:

  • “1992 年 7 月”,你确定吗?那是 20 年前的 SQL。
  • @FrankHeikens,ANSI-92 仍在广泛使用并涵盖了这个问题,但我不介意使用其他标准,如 ANSI-99 甚至更新的标准。
  • 您是在寻找备忘单,还是在尝试实现 DDL 生成工具或其他?
  • 我有兴趣尝试实现一个 DDL 生成工具
  • 网上有一些不错的网站,总结了各种数据库系统之间的差异。该主题与this one 非常相似。我建议你看看那里。

标签: mysql postgresql relational-database database-schema ansi-92


【解决方案1】:

我从未见过类似的,但你可以为 ANSI SQL 获得 EBNF

http://savage.net.au/SQL/

【讨论】:

    【解决方案2】:

    您可以查看一些 ActiveRecord 实现以获取线索。他们尝试为查询实现一个公共层。大多数框架都为 SQL 引擎提供了某种抽象。 Win 可移植性失去了每个数据库供应商的特殊实现细节。

    如果您有时间,可以查看每个数据库文档并创建解析器。 对于 Postgresql 数据库,您可以在手册中检查命令结构:http://www.postgresql.org/docs/9.0/static/sql-commands.html

    Postgresql 的一个小例子在表上添加了模式名称。默认使用公共架构。

    CREATE TABLE "%s"."%s" (...);
    

    【讨论】:

      【解决方案3】:

      我想到的一个肮脏的技巧是使用像 Hibernate 这样的 O/R 引擎对此进行建模。开发带注释的类或 .hbm.xml 文件,只需打开 hbm2ddl=auto 并针对您的数据库列表运行它。使用 show_sql 属性记录 hibernate 生成的所有 DML/DDL...

      我假设像 hibernate 这样的 O/R 框架已经看到了世界并且可以处理已建立的 RDBMS 平台的所有细微差别。但是,我不确定 hibernate 是否会尝试生成尽可能通用的 DDL scriptlet 或尽可能本地方言。

      希望这会有所帮助;)

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-12-18
        • 2017-09-15
        • 1970-01-01
        • 2022-07-06
        相关资源
        最近更新 更多