Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/68.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql SQL:应用程序跨数据库仅维护一个通用模式_Mysql_Sql_Sql Server_Database_Postgresql - Fatal编程技术网

Mysql 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,

实际上,我有一个基于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,
  `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的错误
compatible=ansi返回:

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及以上版本):
    默认情况下以空为标识生成的编号
。。这只是一个生成密钥的常见任务。还有很多其他有趣的不同之处。例如,MySQL有
tinyint
unsigned int
。PostgreSQL没有。PostgreSQL有
bool
bit(n)
位字段、范围类型、PostGIS类型等,这是大多数其他数据库所没有的。即使对于共享的东西,怪癖也比比皆是——在所有数据库中指定“4字节有符号整数”甚至不是一件小事


有一个办法可以帮助我,我听说这是件好事。有些人转而使用ORM来管理DDL的生成,尽管他们倾向于使用最原始的数据库功能。

Ok Thank's!因此,我需要一个更高级别的工具来描述我的模式,并将其导出到不同的数据库中。我会找液化物,一些ORM,你知道其他的工具吗?