2014-09-11 3 views
0

다른 테이블의 FK를 참조하도록 현재 일반 INT (16) 인 열을 업데이트하려고합니다. 나는 다음을 시도했지만 오류로했습니다MySQL에 외래 키 추가

ALTER TABLE ts_keys ADD CONSTRAINT FK_account_id FOREIGN KEY (account_id) REFERENCES accounts(id) ON UPDATE CASCADE ON DELETE CASCADE 

편집 :

Can't create table (errno: 150) 

두 테이블 이노 디비 있습니다 : 죄송합니다, 오류를 추가하는 것을 잊었다.

편집 2 : 나는 또한 시도 테이블하지만 같은 오류를 다시 생성 :

CREATE TABLE ts_keys (
    id int PRIMARY KEY AUTO_INCREMENT, 
    account_id int, 
    FOREIGN KEY fk_account_id1(account_id) REFERENCES accounts(id) 
) ENGINE=InnoDB; 
+0

오류가 있습니까? 어떤 오류가 있습니까? – Barmar

+0

첫 번째 구문이 잘못되었으므로 MySQL 매뉴얼을 확인하십시오. 'MODIFY columnname' 다음에 외래 키 정의가 아닌 열 정의가 와야합니다. 두 번째 오류의 경우 오류 150의 원인을 설명하는 다른 많은 질문이 있습니다. 가능한 원인은 다양하며 그 원인을 알 수있는 충분한 정보를 제공하지 않았습니다. 그래서 수색을해라. – Barmar

답변

1

외부 키 컬럼의 데이터 유형 정확히 참조 열의 데이터 유형과 일치해야합니다.

SHOW CREATE TABLE accounts을 수행하고 id 열의 정의를 확인하십시오.

해당 열이 정의 무엇이든

당신이 외래 키 (ts_keys 테이블의 account_id 열)로 정의 할 열이 그 데이터 형 정확히 일치해야 무엇이든, INT UNSIGNED, BIGINT, VARCHAR(16), 등. (일치해야하는 데이터 유형 일뿐입니다. 열 주석이 일치 할 필요가 없으며 DEFAULT 값이 일치 할 필요가 없으며 NULL/NOT NULL이 일치 할 필요는 없습니다. 그러나 데이터 유형이 일치해야합니다.


제약 조건을 추가하기위한 귀하의 구문은 올바른 같습니다

ALTER TABLE ts_keys 
    ADD CONSTRAINT FK_account_id 
    FOREIGN KEY (account_id) 
    REFERENCES accounts(id) 
    ON UPDATE CASCADE ON DELETE CASCADE 

를 인정 하듯은 "테이블을 만들 수 없습니다 (errno를 : 150)"무슨 일이 사실의 대한 최소한의 도움이 메시지 있어야한다 문제가 발생했습니다 (적어도 오류는 "수동으로 확인"구문 오류가 아닙니다.)

+0

예 : "서명되지 않은"문제를 수정하여 추가 :) 감사합니다! – Chris