从SQL DUMP导入数据库模式

时间:2013-03-20 18:20:02

标签: mysql sql

我有以下数据库架构,其中包含一堆表和外键,当我尝试导入sql转储时,我不断收到以下错误。

Can't create table errno 150

我知道它正在尝试创建具有尚未创建的表的依赖关系的表但我不明白如何导出模式而不会删除所有外键,然后根据给出的答案重新创建它们在Stack和google上。

必须有一种更简单的方法,那些拥有数百张牌桌的大公司会做些什么?

我有下面的sql语句,任何建议将不胜感激。感谢

#
# Encoding: Unicode (UTF-8)
#


DROP TABLE IF EXISTS `contact_interest`;
DROP TABLE IF EXISTS `contact_seeking`;
DROP TABLE IF EXISTS `interests`;
DROP TABLE IF EXISTS `job_current`;
DROP TABLE IF EXISTS `job_desired`;
DROP TABLE IF EXISTS `job_listings`;
DROP TABLE IF EXISTS `my_contacts`;
DROP TABLE IF EXISTS `profession`;
DROP TABLE IF EXISTS `seeking`;
DROP TABLE IF EXISTS `status`;
DROP TABLE IF EXISTS `zip_code`;


CREATE TABLE `contact_interest` (
  `contact_id` int(10) unsigned NOT NULL,
  `interest_id` int(10) unsigned NOT NULL,
  KEY `mycontacts_contactinterest_fk` (`contact_id`),
  KEY `interests_contactinterest_fk` (`interest_id`),
  CONSTRAINT `mycontacts_contactinterest_fk` FOREIGN KEY (`contact_id`) REFERENCES `my_contacts` (`contact_id`),
  CONSTRAINT `interests_contactinterest_fk` FOREIGN KEY (`interest_id`) REFERENCES `interests` (`interest_id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;


CREATE TABLE `contact_seeking` (
  `contact_id` int(10) unsigned NOT NULL,
  `seeking_id` int(10) unsigned NOT NULL,
  KEY `contactid_contactseeking_fk` (`contact_id`),
  KEY `seeking_contactseeking_fk` (`seeking_id`),
  CONSTRAINT `contactid_contactseeking_fk` FOREIGN KEY (`contact_id`) REFERENCES `my_contacts` (`contact_id`),
  CONSTRAINT `seeking_contactseeking_fk` FOREIGN KEY (`seeking_id`) REFERENCES `seeking` (`seeking_id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;


CREATE TABLE `interests` (
  `interest_id` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `interest` varchar(50) DEFAULT NULL,
  PRIMARY KEY (`interest_id`)
) ENGINE=InnoDB AUTO_INCREMENT=25 DEFAULT CHARSET=latin1;


CREATE TABLE `job_current` (
  `contact_id` int(10) unsigned NOT NULL,
  `title` varchar(20) DEFAULT NULL,
  `salary` decimal(8,2) DEFAULT NULL,
  `start_date` date DEFAULT NULL,
  KEY `mycontacts_jobcurrent_fk` (`contact_id`),
  CONSTRAINT `mycontacts_jobcurrent_fk` FOREIGN KEY (`contact_id`) REFERENCES `my_contacts` (`contact_id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;


CREATE TABLE `job_desired` (
  `contact_id` int(10) unsigned NOT NULL,
  `title` varchar(20) DEFAULT NULL,
  `salary_low` decimal(8,2) DEFAULT NULL,
  `salary_high` decimal(8,2) DEFAULT NULL,
  `available` date DEFAULT NULL,
  `years_exp` int(11) DEFAULT NULL,
  KEY `mycontacts_jobdesired_fk` (`contact_id`),
  CONSTRAINT `mycontacts_jobdesired_fk` FOREIGN KEY (`contact_id`) REFERENCES `my_contacts` (`contact_id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;


CREATE TABLE `job_listings` (
  `job_id` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `title` varchar(25) DEFAULT NULL,
  `salary` decimal(8,2) DEFAULT NULL,
  `zip_code` char(5) DEFAULT NULL,
  `description` varchar(50) DEFAULT NULL,
  PRIMARY KEY (`job_id`)
) ENGINE=InnoDB AUTO_INCREMENT=9 DEFAULT CHARSET=latin1;


CREATE TABLE `my_contacts` (
  `contact_id` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `last_name` varchar(30) DEFAULT NULL,
  `first_name` varchar(20) DEFAULT NULL,
  `phone` char(10) DEFAULT NULL,
  `email` varchar(50) DEFAULT NULL,
  `gender` char(1) DEFAULT NULL,
  `birthday` date DEFAULT NULL,
  `prof_id` int(11) unsigned NOT NULL,
  `status_id` int(10) unsigned NOT NULL,
  `zip_code` char(5) DEFAULT NULL,
  PRIMARY KEY (`contact_id`),
  KEY `profession_mycontacts_fk` (`prof_id`),
  KEY `zipcode_mycontacts_fk` (`zip_code`),
  KEY `status_my_contacts_fk` (`status_id`),
  CONSTRAINT `profession_mycontacts_fk` FOREIGN KEY (`prof_id`) REFERENCES `profession` (`prof_id`),
  CONSTRAINT `status_my_contacts_fk` FOREIGN KEY (`status_id`) REFERENCES `status` (`status_id`),
  CONSTRAINT `zipcode_mycontacts_fk` FOREIGN KEY (`zip_code`) REFERENCES `zip_code` (`zip_code`)
) ENGINE=InnoDB AUTO_INCREMENT=17 DEFAULT CHARSET=latin1;


CREATE TABLE `profession` (
  `prof_id` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `profession` varchar(30) DEFAULT NULL,
  PRIMARY KEY (`prof_id`)
) ENGINE=InnoDB AUTO_INCREMENT=16 DEFAULT CHARSET=latin1;


CREATE TABLE `seeking` (
  `seeking_id` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `seeking` varchar(40) DEFAULT NULL,
  PRIMARY KEY (`seeking_id`)
) ENGINE=InnoDB AUTO_INCREMENT=17 DEFAULT CHARSET=latin1;


CREATE TABLE `status` (
  `status_id` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `status` varchar(30) DEFAULT NULL,
  PRIMARY KEY (`status_id`)
) ENGINE=InnoDB AUTO_INCREMENT=9 DEFAULT CHARSET=latin1;


CREATE TABLE `zip_code` (
  `zip_code` char(5) NOT NULL DEFAULT '',
  `city` varchar(20) DEFAULT NULL,
  `state` char(2) DEFAULT NULL,
  PRIMARY KEY (`zip_code`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

2 个答案:

答案 0 :(得分:2)

我发现我只需要两行来修复我的问题,我在顶部添加了一个0,在底部添加了一个,我很好。抱歉浪费你的时间......

SET FOREIGN_KEY_CHECKS = 0;

SET FOREIGN_KEY_CHECKS = 1;

答案 1 :(得分:0)

最简单的方法是通过命令行这样做:

mysql db_name < backup-file.sql

这会在一个事务中执行您的sql文件。如果您在一个事务中执行您的东西,那么您将不会收到外键错误。