2016-04-06 14 views
1

私はXAMPP 5.6.19-0をMySQLデータベースサーバーとして使用し、MySQL Workbench(Mac OS 10.11.3)経由で管理しています。私は外部キーで、いくつかのテーブルを作成しようとしている、とイムは、このエラーを取得:MySQLエラーコード1005/errno:150

Error Code: 1005. Can't create table imobiliaria24h . proprietario (errno: 150 "Foreign key constraint is incorrectly formed")

は、これは私が使用しようとしているコードです:

CREATE TABLE IF NOT EXISTS PROPRIETARIO (
NOME VARCHAR(30) NOT NULL, 
CPF INT NOT NULL, 
TELEFONE INT NOT NULL, 
CORRETOR_CPF INT NOT NULL, 
PRIMARY KEY (CPF), 
FOREIGN KEY (CORRETOR_CPF) REFERENCES CORRETOR(CPF) 
)ENGINE=InnoDB; 

CREATE TABLE IF NOT EXISTS IMOVEL(
ENDERECO VARCHAR(100) NOT NULL, 
TIPO ENUM('ALUGUEL', 'VENDA'), 
INQUILINO_CPF INT, 
PROPRIETARIO_CPF INT, 
VALOR_ALUGUEL_PRECOVENDA INT NOT NULL, 
NUM_QUARTOS INT NOT NULL, 
METRAGEM INT NOT NULL, 
NUM_BANHEIROS INT NOT NULL, 
VALOR_CONDOMINIO INT NOT NULL, 
IDADE INT NOT NULL, 
HORA_REGISTRO TIME NOT NULL, 
PRIMARY KEY(ENDERECO), 
FOREIGN KEY (INQUILINO_CPF) REFERENCES INQUILINO(CPF), 
FOREIGN KEY (PROPRIETARIO_CPF) REFERENCES PROPRIETARIO(CPF) 
)ENGINE=InnoDB; 

CREATE TABLE IF NOT EXISTS INQUILINO(
NOME VARCHAR(30) NOT NULL, 
CPF INT NOT NULL, 
TELEFONE INT NOT NULL, 
FIADOR BOOLEAN NOT NULL, 
INADIMPLENCIA INT NOT NULL, 
CORRETOR_CPF INT NOT NULL, 
PRIMARY KEY (CPF), 
FOREIGN KEY (CORRETOR_CPF) REFERENCES CORRETOR(CPF) 
)ENGINE=InnoDB; 

CREATE TABLE IF NOT EXISTS CORRETOR(
NOME VARCHAR(30) NOT NULL, 
CPF INT NOT NULL, 
TELEFONE INT NOT NULL, 
ANOS_CASA SMALLINT NOT NULL, 
TRABALHA_FDS BOOLEAN NOT NULL, 
TRABALHA_NOITE BOOLEAN NOT NULL, 
PRIMARY KEY (CPF) 
)ENGINE=InnoDB; 

興味深いのは、つまり、テーブルを別々に作成すると、たとえばPROPRIETARIOとCORRETORの2つ目のINQUILINO、最後にIMOVELが作成され、このようにしてすべてのテーブルが作成されます。私はなぜそれらがすべて "単一のコマンド"で一緒に作成されているエラーを取得しているのか分からない。

答えて

2

あなたはその正確なスクリプトを実行していますか?もしそうなら、参照しているテーブルを実際に作成する前に、外部キーを作成しようとしているようです。

ビルドの順序を変更してみてください。

CREATE TABLE IF NOT EXISTS CORRETOR(
NOME VARCHAR(30) NOT NULL, 
CPF INT NOT NULL, 
TELEFONE INT NOT NULL, 
ANOS_CASA SMALLINT NOT NULL, 
TRABALHA_FDS BOOLEAN NOT NULL, 
TRABALHA_NOITE BOOLEAN NOT NULL, 
PRIMARY KEY (CPF) 
)ENGINE=InnoDB; 

CREATE TABLE IF NOT EXISTS PROPRIETARIO (
NOME VARCHAR(30) NOT NULL, 
CPF INT NOT NULL, 
TELEFONE INT NOT NULL, 
CORRETOR_CPF INT NOT NULL, 
PRIMARY KEY (CPF), 
FOREIGN KEY (CORRETOR_CPF) REFERENCES CORRETOR(CPF) 
)ENGINE=InnoDB; 

CREATE TABLE IF NOT EXISTS INQUILINO(
NOME VARCHAR(30) NOT NULL, 
CPF INT NOT NULL, 
TELEFONE INT NOT NULL, 
FIADOR BOOLEAN NOT NULL, 
INADIMPLENCIA INT NOT NULL, 
CORRETOR_CPF INT NOT NULL, 
PRIMARY KEY (CPF), 
FOREIGN KEY (CORRETOR_CPF) REFERENCES CORRETOR(CPF) 
)ENGINE=InnoDB; 

CREATE TABLE IF NOT EXISTS IMOVEL(
ENDERECO VARCHAR(100) NOT NULL, 
TIPO ENUM('ALUGUEL', 'VENDA'), 
INQUILINO_CPF INT, 
PROPRIETARIO_CPF INT, 
VALOR_ALUGUEL_PRECOVENDA INT NOT NULL, 
NUM_QUARTOS INT NOT NULL, 
METRAGEM INT NOT NULL, 
NUM_BANHEIROS INT NOT NULL, 
VALOR_CONDOMINIO INT NOT NULL, 
IDADE INT NOT NULL, 
HORA_REGISTRO TIME NOT NULL, 
PRIMARY KEY(ENDERECO), 
FOREIGN KEY (INQUILINO_CPF) REFERENCES INQUILINO(CPF), 
FOREIGN KEY (PROPRIETARIO_CPF) REFERENCES PROPRIETARIO(CPF) 
)ENGINE=InnoDB; 
+0

ビンゴ!出来た。どのように私は今気分がいい!ちょうどMySQLを使っています。しかし、助けてくれてありがとう! –

+0

問題ありません。数年前からこのようなことをしてきた人々でさえ、後見のなかで明白に見える間違いをしています。それについて悪いと感じないでください、それはすべて学習プロセスの一部です。がんばろう! –