Mysql SQL:应用程序跨数据库仅维护一个通用模式
实际上,我有一个基于MySQL的应用程序,其模式基于InnoDB(带约束…) 我的同事需要导入这个模式,所以我在SQL文件中导出我的模式 例如:Mysql SQL:应用程序跨数据库仅维护一个通用模式,mysql,sql,sql-server,database,postgresql,Mysql,Sql,Sql Server,Database,Postgresql,实际上,我有一个基于MySQL的应用程序,其模式基于InnoDB(带约束…) 我的同事需要导入这个模式,所以我在SQL文件中导出我的模式 例如: DROP TABLE IF EXISTS `admins`; CREATE TABLE `admins` ( `id` smallint(5) unsigned NOT NULL AUTO_INCREMENT, `username` varchar(45) NOT NULL, `password` varchar(45) NOT NULL,
DROP TABLE IF EXISTS `admins`;
CREATE TABLE `admins` (
`id` smallint(5) unsigned NOT NULL AUTO_INCREMENT,
`username` varchar(45) NOT NULL,
`password` varchar(45) NOT NULL,
`email` varchar(45) DEFAULT NULL,
`creation_date` datetime NOT NULL,
`close_date` datetime DEFAULT NULL,
`close_reason` varchar(45) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=4 ;
现在,我想要一个跨数据库应用程序,因此:
- 我尝试在PostgreSQL中导入我以前的sql文件,但没有成功,我的sql文件与mysql相关(例如使用`character…)
- 我尝试使用mysqldump和兼容模式“-compatible=ansi”导出我的模式。我的目标是:拥有一个与所有主要SGBD兼容的通用sql文件。但它不起作用:PostgreSQL返回有关synthax的错误
DROP TABLE IF EXISTS "admins";
/*!40101 SET @saved_cs_client = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE "admins" (
"id" smallint(5) unsigned NOT NULL AUTO_INCREMENT,
"username" varchar(45) NOT NULL,
"password" varchar(45) NOT NULL,
"email" varchar(45) DEFAULT NULL,
"creation_date" datetime NOT NULL,
"close_date" datetime DEFAULT NULL,
"close_reason" varchar(45) DEFAULT NULL,
PRIMARY KEY ("id")
);
/*!40101 SET character_set_client = @saved_cs_client */;
我甚至尝试使用compatibility=postgresql导出:
DROP TABLE IF EXISTS "admins";
/*!40101 SET @saved_cs_client = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE "admins" (
"id" smallint(5) unsigned NOT NULL,
"username" varchar(45) NOT NULL,
"password" varchar(45) NOT NULL,
"email" varchar(45) DEFAULT NULL,
"creation_date" datetime NOT NULL,
"close_date" datetime DEFAULT NULL,
"close_reason" varchar(45) DEFAULT NULL,
PRIMARY KEY ("id")
);
/*!40101 SET character_set_client = @saved_cs_client */;
但也没有起作用
我知道有一些工具可以将MySQL模式转换为PostgreSQL模式,但这不是目标
我的问题:是否可能只有一个与MySQL、PostgreSQL、SQLite兼容的SQL文件。。。不为每个SGBD维护一个SQL文件吗
多谢各位
我的问题:是否可能只有一个与MySQL、PostgreSQL、SQLite兼容的SQL文件。。。不为每个SGBD维护一个SQL文件吗
使用原始SQL并不容易,除非您希望使用数据库支持功能的可怜子集
SQL中的SELECTs和DML可以适度地进行移植,但DDL通常是除了总体基础之外的所有方面的无望噩梦。您需要一个为您生成SQL的抽象工具,处理序列/生成键、类型命名、约束、索引创建等方面的数据库特定差异
作为一个示例,让我们看一下合成关键点常用的自动递增值/序列:
- MySQL:
整数自动增量
- PostgreSQL:
(序列的简写)序列
- MS-SQL:
int-IDENTITY(1,1)
- 甲骨文(12c以下):无直接支持,使用序列
- Oracle(12c及以上版本):
默认情况下以空为标识生成的编号
tinyint
和unsigned int
。PostgreSQL没有。PostgreSQL有bool
和bit(n)
位字段、范围类型、PostGIS类型等,这是大多数其他数据库所没有的。即使对于共享的东西,怪癖也比比皆是——在所有数据库中指定“4字节有符号整数”甚至不是一件小事
有一个办法可以帮助我,我听说这是件好事。有些人转而使用ORM来管理DDL的生成,尽管他们倾向于使用最原始的数据库功能。Ok Thank's!因此,我需要一个更高级别的工具来描述我的模式,并将其导出到不同的数据库中。我会找液化物,一些ORM,你知道其他的工具吗?