Список общих запросов SQL для баз данных с открытым исходным кодом?
Я пытаюсь найти информацию о правильных запросах SQL RDBMS для баз данных с открытым исходным кодом, таких как MySQL, PostgreSQL, SQLite и других. Есть ли какие-либо предварительно собранные списки или мне просто нужно прочесать документацию для каждого механизма базы данных (и в некоторых случаях угадать правильную реализацию? ALTER TABLE
против 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;
3 ответа
Я никогда не видел подобного, но вы можете получить EBNF для ANSI SQL
Одна грязная хитрость, которая приходит мне в голову, - это смоделировать это с помощью O/R-движка, такого как Hibernate. Разрабатывайте аннотированные классы или файлы.hbm.xml и просто включите hbm2ddl = auto и запустите его для своего списка баз данных. Используйте свойство show_sql для регистрации всего DML/DDL, который создает hibernate...
Я предполагаю, что O/R-фреймворки, такие как hibernate, видели мир и могут обрабатывать все нюансы существующих платформ RDBMS. Однако я не уверен, что hibernate пытается генерировать сценарии DDL, которые являются настолько универсальными, насколько это возможно, либо настолько родными для диалекта, насколько это возможно.
надеюсь это поможет;)
Вы можете взглянуть на некоторые реализации ActiveRecord для подсказок. Они пытаются реализовать слой commom для запросов. Большинство фреймворков предоставляют некоторую абстракцию для движка SQL. Переносимость Win теряет особые детали реализации для каждого поставщика базы данных.
Если у вас есть время, вы можете просмотреть каждую документацию базы данных и создать парсер. Для базы данных Postgresql вы можете проверить конструкции команд в руководстве: http://www.postgresql.org/docs/9.0/static/sql-commands.html.
Postgresql для небольшого примера добавляет имя схемы в таблицу. Использование общедоступной схемы по умолчанию.
CREATE TABLE "%s"."%s" (...);