2016-04-06 9 views
1

Ich verwende ein XAMPP 5.6.19-0 als MySQL Datenbankserver und verwalte es über MySQL Workbench (Mac OS 10.11.3). Ich versuche, einige Tabellen mit Fremdschlüsseln zu erstellen, und im immer diese Fehlermeldung:MySQL Fehlercode 1005/errno: 150

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

Dies ist der Code, den ich zu verwenden ist versucht:

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; 

Das Interessante daran ist, dass, Wenn ich die Tabelle separat erzeuge, nur die, die sich gegenseitig referenzieren, habe ich zum Beispiel zuerst PROPRIETARIO und CORRETOR, dann INQUILINO und zuletzt IMOVEL erstellt, und auf diese Weise hat alles funktioniert. Ich verstehe nicht, warum ich den Fehler bekomme, sie alle zusammen in einem "einzigen Befehl" zu erstellen.

Antwort

2

Laufen Sie genau dieses Skript? Wenn dies der Fall ist, sieht es so aus, als ob Sie versuchen, die Fremdschlüssel zu erstellen, bevor Sie tatsächlich die Tabellen erstellt haben, auf die sie verweisen.

Versuchen Sie, die Reihenfolge zu ändern, in der Sie sie erstellen.

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

Bingo! Es funktionierte. Wie dumm fühle ich mich jetzt! Beginne gerade mit MySQL. Danke für die Hilfe! –

+0

Kein Problem. Selbst Leute, die seit Jahren dieses Zeug machen, machen Fehler, die im Nachhinein offensichtlich scheinen. Fühle dich nicht schlecht, es ist alles Teil des Lernprozesses. Viel Glück! –

Verwandte Themen