2013-03-20 4 views
2

SQL 덤프를 가져 오려고하면 다음과 같은 오류가 계속 발생하여 다음과 같은 데이터베이스 스키마에 테이블과 외부 키가 있습니다.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; 

답변

2

나는 단지 내 문제를 해결하기 위해 두 줄 필요하다는 것을 발견, 나는 바닥에 상단에 하나의 0과 1을 추가하고 나는 좋았다. 죄송합니다

SET FOREIGN_KEY_CHECKS = 0; 

SET FOREIGN_KEY_CHECKS = 1; 
+1

무언가를 배웠으므로 시간 낭비가 아니 었습니다. 실제로, mysqldump를 데이터베이스에 저장하면 mysqldump가 시작될 때이 설정이 0으로 설정되고 마지막에 재설정된다. 그래서, 오늘 당신 +1! – RolandoMySQLDBA

0

가장 쉬운 방법은 다음과 같이 명령 줄을 통해 그것을 할 것입니다 ... 당신의 시간을 낭비 :

mysql db_name < backup-file.sql 

이 하나의 트랜잭션에서 SQL 파일을 실행합니다. 한 트랜잭션에서 물건을 실행하면 외래 키 오류가 발생하지 않습니다.

+0

이전에 시도했지만 실패했습니다. 나는 덤프 파일을 열고 외부 키 검사가 테이블 생성 명령 다음에 나타나는 데이터 삽입 명령의 전후에 위치한다는 것을 발견했습니다. 방금 foreign_key_check = 0을 맨 위로 옮겼습니다. – Drewdin

관련 문제