2

一連のテーブルと外部キーを持つ次のデータベース スキーマがあります。SQL ダンプをインポートしようとすると、次のエラーが発生し続けます。

Can't create table errno 150

まだ作成されていないテーブルの依存関係を持つテーブルを作成しようとしていることは理解していますが、すべての外部キーを解体せずにスキーマをインポートし、スタックで与えられた回答に従ってそれらを再作成する方法がわかりません。グーグル。

何百ものテーブルを持つ大企業は何をしているのでしょうか? もっと簡単な方法があるはずです。

以下の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

問題を解決するには 2 行しか必要ないことがわかりました。上部に 0 を 1 つ、下部に 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 ファイルが 1 つのトランザクションで実行されます。1 つのトランザクションで実行すると、外部キー エラーは発生しません。

于 2013-03-20T18:35:21.253 に答える