2016-07-26 5 views
0

,이 오류 메시지가 받고 있어요 : 당신은 당신의 SQL 구문에 오류가MySQL의 FOREIGN KEY 제약 조건 구문

을; 올바른 구문은 근처를 사용하는 는 MySQL 서버 버전에 해당하는 설명서를 확인 라인 (11)

에서 'CONSTRAINT fk_pay_grade_scale FOREIGN KEY pay_scale_id 참조`pay_s 추가'그러나 나는이 문제를 이해하지 않습니다. 귀하의 도움을 주시면 감사하겠습니다!

 
CREATE TABLE IF NOT EXISTS `pay_grades` (
    `pay_grade_id` int(20) NOT NULL, 
    `pay_scale_id` tinyint(4) NOT NULL, 
    `name` varchar(100) NOT NULL, 
    `basic_salary` decimal(10,2) NOT NULL, 
    `status` int(2) NOT NULL DEFAULT '1', 
    PRIMARY KEY (`pay_grade_id`), 
    INDEX (`pay_scale_id`, `pay_grade_id`), 
    ADD CONSTRAINT `fk_pay_grade_scale` FOREIGN KEY `pay_scale_id` REFERENCES `pay_scales`(`id`) ON UPDATE CASCADE ON DELETE RESTRICT 
) ENGINE=InnoDB DEFAULT CHARSET=utf8; 


CREATE TABLE IF NOT EXISTS `pay_scales` (
`id` tinyint(4) NOT NULL, 
    `name` varchar(100) NOT NULL, 
    PRIMARY KEY(id) 
) ENGINE=InnoDB DEFAULT CHARSET=utf8; 

답변

3

당신은 CREATE TABLE 선언에 ADD CONSTRAINT을 사용할 수 없습니다. 테이블을 만든 후 또는 CREATE TABLE에 제약 조건을 선언하십시오.


최초의 솔루션 : 표

CREATE TABLE IF NOT EXISTS `pay_grades` (
    `pay_grade_id` int(20) NOT NULL, 
    `pay_scale_id` tinyint(4) NOT NULL, 
    `name` varchar(100) NOT NULL, 
    `basic_salary` decimal(10,2) NOT NULL, 
    `status` int(2) NOT NULL DEFAULT '1', 
    PRIMARY KEY (`pay_grade_id`), 
    INDEX (`pay_scale_id`, `pay_grade_id`), 
    FOREIGN KEY (`pay_scale_id`) REFERENCES `pay_scales`(`id`) ON UPDATE CASCADE ON DELETE RESTRICT 
) ENGINE=InnoDB DEFAULT CHARSET=utf8; 

두 번째 솔루션 CREATE의 제약 조건을 추가 제약없이 제약

테이블을 만들기를 추가 할 테이블을 변경을, 다음과 같이 제약 조건을 추가하십시오 :

ALTER TABLE `pay_grades` 
ADD CONSTRAINT `pay_scale_id` FOREIGN KEY REFERENCES `pay_scales`(`id`) 
ON UPDATE CASCADE ON DELETE RESTRICT; 

MySQL documentation 외래 키 선언.

+0

예 : –

+1

@ 답사를 수락하는 @zamansarker는 답변 옆에있는 작은 눈금을 클릭한다는 의미입니다. 다른 답변이 도움이된다면, 당신도 그들을 upvoting 고려해야합니다. 자세한 내용은 http://stackoverflow.com/help/someone-answers에서 확인하십시오. – e4c5

0

테이블 생성 순서가 다른 것 같습니다. 먼저 외부 키 테이블을 만드는 것보다 기본 키 테이블을 만듭니다.

CREATE TABLE IF NOT EXISTS `pay_scales` (
`id` tinyint(4) NOT NULL, 
    `name` varchar(100) NOT NULL, 
    PRIMARY KEY(id) 
) ENGINE=InnoDB DEFAULT CHARSET=utf8; 


CREATE TABLE IF NOT EXISTS `pay_grades` (
    `pay_grade_id` int(20) NOT NULL, 
    `pay_scale_id` tinyint(4) NOT NULL, 
    `name` varchar(100) NOT NULL, 
    `basic_salary` decimal(10,2) NOT NULL, 
    `status` int(2) NOT NULL DEFAULT '1', 
    PRIMARY KEY (`pay_grade_id`), 
    INDEX (`pay_scale_id`, `pay_grade_id`), 
    ADD CONSTRAINT `fk_pay_grade_scale` FOREIGN KEY `pay_scale_id` REFERENCES `pay_scales`(`id`) ON UPDATE CASCADE ON DELETE RESTRICT 
) ENGINE=InnoDB DEFAULT CHARSET=utf8;