2013-04-13 2 views
1

나는이 질문에 답을 얻었으며 미안하지만 정직하게 대답을 찾을 수 없다는 것을 알고 있습니다.테이블을 만들 수 없습니다. (errno : 150)

CREATE TABLE `admins` (
    `admin_id` int(11) NOT NULL AUTO_INCREMENT, 
    `admin_user` varchar(15) NOT NULL, 
    `admin_password` varchar(15) NOT NULL, 
    `admin_fName` varchar(20) NOT NULL, 
    `admin_lName` varchar(20) NOT NULL, 
    PRIMARY KEY (`admin_id`) 
) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=latin1 

그리고 나는 admin_fname 참조하도록 만들려고하고 테이블 :

이 내 관리자 테이블입니다

CREATE TABLE IF NOT EXISTS posts(
    post_id INT NOT NULL AUTO_INCREMENT, 
     post_title varchar(50), 
     post_content varchar(255), 
     post_user varchar(20) NOT NULL, 
     PRIMARY KEY (post_id), 
     FOREIGN KEY (post_user) REFERENCES admins(admin_fName) 
) ENGINE = INNODB; 

post_user가 admin_fname과 같은 특성을 갖고있는 것 같아요, 그리고이 상위 테이블의 데이터 어떤 시체가 여기에서 무슨 일이 일어 났는지 설명해 주시겠습니까?

답변

2

위의 admin_fname 열에 post_user을 참조 할 수 없습니다. 키를 정의하지 않았기 때문입니다. 직접 질문에 대답하기 위해, 당신은, 컬럼에

CREATE TABLE `admins` 
(
    `admin_id` int(11) NOT NULL AUTO_INCREMENT, 
    `admin_user` varchar(15) NOT NULL, 
    `admin_password` varchar(15) NOT NULL, 
    `admin_fName` varchar(20) NOT NULL, 
    `admin_lName` varchar(20) NOT NULL, 
    KEY (admin_fName),      -- <<== adding key 
    PRIMARY KEY (`admin_id`) 
) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=latin1 

을 키를 추가해야하지만 사용자가 동일한 fname을 가진 혼합 할 수 있기 때문에 장기적 기록에 NON_UNIQUE 컬럼에 참조하는 것은 좋은 생각이 아니다. 더 좋은 디자인은 그대로 테이블을 떠나는 것입니다. 기본 키를 참조하는 테이블 posts에 열을 추가하십시오.

CREATE TABLE `admins` 
(
    `admin_id` int(11) NOT NULL AUTO_INCREMENT, 
    `admin_user` varchar(15) NOT NULL, 
    `admin_password` varchar(15) NOT NULL, 
    `admin_fName` varchar(20) NOT NULL, 
    `admin_lName` varchar(20) NOT NULL, 
    PRIMARY KEY (`admin_id`) 
) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=latin1; 

CREATE TABLE IF NOT EXISTS posts 
(
     post_id INT NOT NULL AUTO_INCREMENT, 
     post_title varchar(50), 
     post_content varchar(255), 
     admin_id int(11) NOT NULL, 
     PRIMARY KEY (post_id), 
     FOREIGN KEY (admin_id) REFERENCES admins(admin_id) 
) ENGINE = INNODB; 
+0

아, 고맙다는 망각 꽤 바보가 된 기분 : 내 업데이트 된 대답을 참조 – ReallyGoodPie

+0

. ': D는 당신이 나의 요점을 알기를 희망합니다 .. –

+0

Thankyou, 많은 도움을주었습니다 :) – ReallyGoodPie

관련 문제