mysql - 是否可以将我的数据库导入另一台服务器?

标签 mysql linux import foreign-keys export

我正在处理放置在在线服务器 (Linux) 上的数据库。我必须对该数据库进行重大更改,因此我将(通过导出然后导入)该数据库移动到我创建的本地数据库(Windows Server)。

最近几天在本地数据库上工作后,我认为工作已经完成,所以我导出了本地数据库并将其导入到实时数据库中,但我做不到。它给了我与外键相关的错误:

#1215 - Cannot add foreign key constraint

phpmyadmin 说有一些错误的是 printprices 这些是我为 printprices 和另一个创建的表可能与错误有某种关系的表格:

CREATE TABLE `printprices` (
  `STYLE` int(11) NOT NULL DEFAULT '0',
  `DIFICULTAD` int(11) NOT NULL DEFAULT '0',
  `NCOLORES` int(11) NOT NULL DEFAULT '0',
  `PROVEEDOR` int(11) NOT NULL DEFAULT '0',
  `SIZECM2MAX` int(11) NOT NULL DEFAULT '0',
  `MINQ` int(11) NOT NULL,
  `MAXQ` int(11) NOT NULL,
  `PRECIO` decimal(5,2) DEFAULT '0.00',
  `PRECIOPRV` decimal(5,2) DEFAULT '0.00',
  `MINWORK` decimal(5,2) DEFAULT '0.00',
  `MINWORKPRV` decimal(5,2) DEFAULT '0.00',
  PRIMARY KEY (`STYLE`,`DIFICULTAD`,`NCOLORES`,`PROVEEDOR`,`SIZECM2MAX`,`MINQ`),
  KEY `FK_PRINT` (`STYLE`,`DIFICULTAD`,`NCOLORES`,`PROVEEDOR`),
  CONSTRAINT `FK_PRINT` FOREIGN KEY (`STYLE`, `DIFICULTAD`, `NCOLORES`, `PROVEEDOR`) REFERENCES `print` (`STYLE`, `DIFICULTAD`, `NCOLORES`, `PROVEEDOR`) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8 


CREATE TABLE `print` (
  `STYLE` int(11) NOT NULL DEFAULT '0',
  `DIFICULTAD` int(11) NOT NULL DEFAULT '0',
  `NCOLORES` int(11) NOT NULL DEFAULT '0',
  `PROVEEDOR` int(11) NOT NULL DEFAULT '0',
  `CFC` decimal(5,2) DEFAULT '0.00',
  PRIMARY KEY (`STYLE`,`DIFICULTAD`,`NCOLORES`,`PROVEEDOR`),
  KEY `FK_PRINTPROV` (`PROVEEDOR`),
  KEY `FK_PRINTSTYLE` (`STYLE`),
  CONSTRAINT `FK_PRINTPROV` FOREIGN KEY (`PROVEEDOR`) REFERENCES `proveedores` (`CODIPRV`) ON DELETE CASCADE,
  CONSTRAINT `FK_PRINTSTYLE` FOREIGN KEY (`STYLE`) REFERENCES `printstyle` (`CODISTY`) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8 


CREATE TABLE `printstyle` (
  `CODISTY` int(11) NOT NULL AUTO_INCREMENT,
  `STYLE` varchar(30) DEFAULT NULL,
  PRIMARY KEY (`CODISTY`)
) ENGINE=InnoDB AUTO_INCREMENT=22 DEFAULT CHARSET=latin1


CREATE TABLE `proveedores` (
  `CODIPRV` int(11) NOT NULL AUTO_INCREMENT,
  `PROVEEDOR` varchar(20) DEFAULT NULL,
  `ENVIOPRICE` decimal(4,2) NOT NULL DEFAULT '0.00',
  `CARTONPRICE` decimal(4,2) NOT NULL DEFAULT '0.00',
  `LIMITPRICE` decimal(6,2) NOT NULL,
  PRIMARY KEY (`CODIPRV`)
) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=latin1

最佳答案

我终于找到了它不起作用的原因:

问题是我试图将我的数据库上传到 Mysql 上,该数据库由区分大小写的 Linux 托管。我的外键存储在大写字母上,但我的表不是。

当 Linux 中的 Mysql 读取该文件并尝试在创建它之前删除一个表时,该表没有被删除,因为该名称与已经存储在大写中的名称不完全相同之前。

解决方案是编辑导出文件并将所有表名从小写更改为大写。

关于mysql - 是否可以将我的数据库导入另一台服务器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35848509/

相关文章:

mysql - SQL重复触发器

MySQL Alter 表防止回滚 DML(?)

python - 冲突的进口

mysql - 导入sql文件时出错

android - 无法启动 Gauge Intellij 插件

mysql - 我怎样才能获得每个艺术家的最高评价专辑?

mysql - 如何删除数据库中的特殊字符?

java - 在linux下编译的Eclipse插件可以在windows上工作吗?

java -/usr/bin/ld : cannot find -ljvm:during compiling jni project

linux - 如何从jetty webroot文件夹外部访问资源(图像/mp3)?