5

MySQL、PostgreSQL、SQLite などのオープン ソース データベースの正しいRDBMS SQL クエリに関する情報を探しています。それらの事前に組み立てられたリストはありますか、それとも各データベースエンジンのドキュメントをくまなく調べる必要がありますか (場合によっては、正しい実装について推測しますか? 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;
4

3 に答える 3

4

似たようなものは見たことがありませんが、ANSI SQL の EBNF を取得できます

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

于 2012-09-18T16:01:26.990 に答える
0

手がかりとして ActiveRecord の実装を見ることができます。彼らは、クエリ用の共通レイヤーを実装しようとしています。ほとんどのフレームワークは、SQL エンジンに対して何らかの抽象化を提供します。Win の移植性は、各データベース ベンダーの特別な実装の詳細を失います。

時間があれば、各データベースのドキュメントを見て、パーサーを作成できます。Postgresql データベースの場合、マニュアルでコマンド構成を確認できます: http://www.postgresql.org/docs/9.0/static/sql-commands.html

小さな例の Postgresql は、テーブルにスキーマ名を追加します。public スキーマをデフォルトとして使用します。

CREATE TABLE "%s"."%s" (...);
于 2013-08-08T22:39:36.957 に答える
0

私の頭に浮かぶ汚いトリックの 1 つは、Hibernate のような O/R エンジンを使用してこれをモデル化することです。注釈付きクラスまたは .hbm.xml ファイルを開発し、単にhbm2ddl =auto をオンにして、データベースのリストに対して実行します。show_sqlプロパティを使用して、休止状態が生成しているすべての DML/DDL をログに記録します...

私は、休止状態のような O/R フレームワークが世界を見ており、確立された RDBMS プラットフォームのすべてのニュアンスを処理できると想定しています。ただし、hibernate が可能な限り汎用的な DDL スクリプトレットを生成しようとするのか、それとも方言に可能な限りネイティブなのかはわかりません。

お役に立てれば ;)

于 2013-08-13T13:47:53.970 に答える