2013-05-24 3 views
0

내 Reviewers_POS 테이블에 대한 외래 키를 만들어야합니다. .. 내 차 키로 Reviewers_Id를 가지고 있고, 나는 Reviewrs_POS 테이블에서 내 id_r1에 전달하려는 __이 오류 받고 있어요Mysql 외래 키 만들기

import MySQLdb as mdb 
    import sys 


    conexao = mdb.connect('localhost', 'root', 'rot', 'DbOmelete') 
    with conexao: 
    cur = conexao.cursor() 

    cur.execute("CREATE TABLE IF NOT EXISTS Reviewers(Reviewers_Id int unsigned not null AUTO_INCREMENT, PRIMARY KEY (Reviewers_Id),Title varchar(500), Polarity INT, Review TEXT);") 
    cur.execute("CREATE TABLE IF NOT EXISTS Reviewers_POS(ReviewersPOS_Id int unsigned not null PRIMARY KEY AUTO_INCREMENT, Review_POS TEXT,id_r1 integer,CONSTRAINT fk_id FOREIGN KEY (id_r1) REFERENCES Reviewers (Reviewers_Id));") 

: 마지막

역 추적 (가장 최근에 전화를) :

File "SQLTesteForeign.py", line 14, in <module> 
    cur.execute("CREATE TABLE IF NOT EXISTS Reviewers_POS(ReviewersPOS_Id int unsigned not null PRIMARY KEY AUTO_INCREMENT, Review_POS TEXT,id_r1 integer,CONSTRAINT fk_id FOREIGN KEY (id_r1) REFERENCES Reviewers (Reviewers_Id) ON DELETE NO ACTION ON UPDATE NO ACTION);") 
    File "/usr/lib/python2.7/dist-packages/MySQLdb/cursors.py", line 174, in execute 
    self.errorhandler(self, exc, value) 
    File "/usr/lib/python2.7/dist-packages/MySQLdb/connections.py", line 36, in defaulterrorhandler 
    raise errorclass, errorvalue 
_mysql_exceptions.OperationalError: (1005, "Can't create table 'DbOmelete.Reviewers_POS' (errno: 150)") 

누군가 그것을 해결하는 방법을 알고 있습니까? 내가 뭔가를 놓친 것 같아요. 왜냐하면 "어디서"가 오류인지 알지 못하기 때문입니다.

+1

두 번째'CREATE TABLE' 문의 구문을 확인하십시오. PRIMARY KEY 절이 올바른 형식이라고 생각하지 않습니다. –

답변

2

기본 키는 int unsigned이고 외래 키는 integer이고 두 개는 같지 않습니다. 호환 가능. 외래 키를 int unsigned으로 변경하면 테이블이 성공적으로 생성됩니다.

An SQLfiddle to test with

+0

나는 너무 어리 석다. '( 감사합니다. – Marco

+0

하지만 열 id_r1에서 "NULL"만 얻는 이유는 무엇입니까? 나는 다른 테이블의 ID와 동일한 숫자로 생각한다고 생각합니다. – Marco

+0

@Marco 당신이 그런 식으로 삽입하지 않는다면 ... [이 피들에서 어떻게 작동하는지보십시오] (http://sqlfiddle.com/#!2/d4ba7/1). –