2011-10-27 2 views
3

저는 DB 남자는 아니지만이 제품을 조금이라도 해킹하고있어 문제를 해결할 수 없습니다. 관련 문서 페이지 (http://dev.mysql.com/doc/refman/5.5/en/innodb-foreign-key-constraints.html)를 읽었으며 구문이 어디에 문제가되는지 알 수 없습니다. .MySQL 만들기 테이블 및 외부 키 오류

ERROR 1064 (42000) at line 84: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'FOREIGN KEY (user_id) REFERENCES user(id) 
    ON DELETE RESTRICT ON UPDATE C' at line 5 

관련 SQL 순서 (id)와 사용자 (id)는 각각의 테이블에서 자동 증가 int (10) 필드입니다.

DROP TABLE IF EXISTS `user_orders`; 
CREATE TABLE `user_orders` (
`user_id` int(10) unsigned NOT NULL default '0', 
`order_id` int(10) unsigned NOT NULL default '0', 
PRIMARY KEY (`user_orders_user_id`, `user_orders_order_id`) 
FOREIGN KEY (user_id) REFERENCES user(id) 
    ON DELETE RESTRICT ON UPDATE CASCADE, 
FOREIGN KEY (order_id) REFERENCES order(id) 
    ON DELETE RESTRICT ON UPDATE CASCADE, 
) AUTO_INCREMENT=50; 

감사합니다. 특히 내가 무엇을 놓쳤는 지 설명 할 수 있다면 감사하겠습니다.

PRIMARY KEY (`user_orders_user_id`, `user_orders_order_id`), -- <------- 
FOREIGN KEY (user_id) REFERENCES user(id) ... 

그리고 당신은 당신이 당신의 외래 키가 시행하려는 경우 InnoDB의 엔진을 사용하는 것이 좋습니다 :

답변

5

당신은 당신의 PK 뒤에 쉼표를 놓치고 난 당신이 생각

) AUTO_INCREMENT=50 ENGINE=InnoDB; 
+0

정말 고맙습니다. 특히 RE : InnoDB를 사용하십시오. – elithrar

-1

니가 뭘하고 있는지 전혀 몰라. 코드에 오류가 있습니다.

user_id INT (10) 부호 NOT NULL 기본 '0', order_id INT (10) 부호 NOT NULL 기본 '0', PRIMARY KEY (user_orders_user_id, user_orders_order_id)를 user_orders_user_id에서 온 할

. 그리고 왜 두 번. 시간을내어 코드를 읽으십시오. 그것은 , PRIMARY KEY (user_id, order_id)이어야

FOREIGN KEY (USER_ID)는 사용자 (ID) ON UPDATE CASCADE ON, 제한 삭제 참조 FOREIGN KEY (ORDER_ID)이 참고 문헌 순서 (ID)를 ON, 제한 ON 삭제 업데이트 캐스케이드, ) AUTO_INCREMENT = 50;

다른 접근 방법을 제안합니다. 먼저 쉼표를 다시 주문하여 쉽게 전환 할 수 있습니다. 그런 다음 FK 줄 앞에 #을 붙이십시오.

DROP TABLE IF EXISTS `user_orders`; 
CREATE TABLE `user_orders` 
(user_id int(10) unsigned NOT NULL default '0' 
, order_id int(10) unsigned NOT NULL default '0' 
, PRIMARY KEY (`user_id`, `order_id`) 
#, FOREIGN KEY (user_id) REFERENCES userS(id) ON DELETE RESTRICT ON UPDATE CASCADE 
# , FOREIGN KEY (order_id) REFERENCES order_id) ON DELETE RESTRICT ON UPDATE CASCADE 
) ENGINE=InnoDB 
# AUTO_INCREMENT=50 
DEFAULT CHARSET=utf8 
; 

단순화. 적어도 실행됩니다. 그런 다음 한 번에 한 줄의 주석 처리를 제거하십시오.

유형

표시 엔진 INNODB 상태;

이상한 mysql 오류가 발생할 때마다.

을 찾으십시오.
------------------------ 
LATEST FOREIGN KEY ERROR 
------------------------ 
160323 10:25:43 Error in foreign key constraint of table DEMO/user_orders: 
FOREIGN KEY (user_id) REFERENCES userS(id) ON DELETE RESTRICT ON UPDATE CASCADE 

이렇게하면 다음과 같은 해결책을 얻을 수 있습니다.

CREATE TABLE `USERS` 
(`ID` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT 
, `NAME` VARCHAR(10) NOT NULL 
, `EMAIL` VARCHAR(20) NOT NULL 
, `ACTIVE` BOOLEAN NOT NULL default 0 
, CONSTRAINT PK PRIMARY KEY (`ID`) USING BTREE 
, UNIQUE KEY `UK_ID` (`ID`) USING BTREE 
, UNIQUE KEY `UK_NAME` (`NAME`) 
, UNIQUE KEY `UK_EMAIL` (`EMAIL`) USING BTREE 
) ENGINE=InnoDB DEFAULT CHARSET=utf8; 

DROP TABLE IF EXISTS `user_orders`; 
CREATE TABLE `user_orders` 
(user_id int(10) unsigned NOT NULL # default '0' 
, order_id int(10) unsigned NOT NULL # default '0' 
, PRIMARY KEY (`user_id`, `order_id`) 
, FOREIGN KEY (user_id) REFERENCES USERS(id) ON DELETE RESTRICT ON UPDATE CASCADE 
# , FOREIGN KEY (order_id) REFERENCES order_id ON DELETE RESTRICT ON UPDATE CASCADE 
) ENGINE=InnoDB 
# AUTO_INCREMENT=50 
DEFAULT CHARSET=utf8 
;