2

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

Can't create table errno 150

我知道它正在尝试创建具有尚未创建的表的依赖关系的表,但我不明白如何在不删除所有外键的情况下导入架构,然后根据 Stack 上给出的答案重新创建它们和谷歌。

必须有一个更简单的方法,大公司有数百张桌子做什么?

我有下面的 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;
4

2 回答 2

2

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

SET FOREIGN_KEY_CHECKS = 0;

SET FOREIGN_KEY_CHECKS = 1;
于 2013-03-20T18:31:36.620 回答
0

最简单的方法是通过这样的命令行来完成:

mysql db_name < backup-file.sql

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

于 2013-03-20T18:35:21.253 回答