5

Estoy tratando de encontrar información sobre el correcto RDBMS SQL queries para bases de datos de código abierto como MySQL, PostgreSQL, SQLite y otros. Son sus listas de pre-ensamblados por ahí o lo hacen sólo hay que peinar la documentación de cada motor de base de datos (y en algunos casos conjetura en cuanto a la aplicación correcta?ALTER TABLE vs CREATE INDEX)Lista de consultas SQL comunes para bases de datos de código abierto?

Por ejemplo, hasta ahora tener esta lista (parcial) para 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; 
+0

"Julio de 1992", ¿estás seguro? Es SQL de hace 20 años. –

+0

@FrankHeikens, ANSI-92 todavía está en uso amplio y cubre esta pregunta, aunque no me importa usar otro estándar como ANSI-99 o incluso más nuevo. – Xeoncross

+1

¿Está buscando una hoja de trucos o está intentando implementar una herramienta de generación de DDL, o alguna otra cosa? –

Respuesta

0

Puede echar un vistazo a la implementación de ActiveRecord para obtener pistas. Intentan implementar una capa común para consultas. La mayoría de los marcos proporcionan algún tipo de abstracción para el motor SQL. La portabilidad de Win pierde los detalles especiales de implementación en cada proveedor de base de datos.

Si tiene tiempo puede echar un vistazo a la documentación de cada base de datos y crear el analizador. Para la base de datos Postgresql puede verificar construcciones de comandos en el manual: http://www.postgresql.org/docs/9.0/static/sql-commands.html.

Postgresql para un pequeño ejemplo agrega el nombre del esquema en la tabla. Usar el esquema público como predeterminado.

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

Un truco sucio que viene a mi mente es modelar esto usando un motor O/R como Hibernate. Desarrolle clases anotadas o archivos .hbm.xml y simplemente active hbm2ddl = auto y ejecútelo en su lista de bases de datos. Utilice la propiedad show_sqlpara registrar toda la DML/DDL que Hibernate está produciendo ...

Estoy suponiendo que O/R marcos como Hibernate han visto el mundo y puede manejar todos los matices de las plataformas de RDBMS establecidos. No estoy seguro, sin embargo, si hibernate intenta generar scriptlets DDL que sean tan genéricos como sea posible o tan nativos al dialecto como sea posible.

Espero que esto ayude;)

Cuestiones relacionadas