2016-04-06 17 views
1

MySQL Veritabanı sunucusu olarak bir XAMPP 5.6.19-0 kullanıyorum ve MySQL Workbench (Mac OS 10.11.3) ile yönetiyorum. ,MySQL hata kodu 1005/errno: 150

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; 

ilginç şey şudur: Ben yabancı anahtarlarla bazı tablolar oluşturmak için çalışıyorum ve im bu hatayı alıyorum:

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

Bu benim kullanmaya çalışıyorum kodudur Eğer tabloyu ayrı olarak oluşturursam, sadece birbirini referans alanlarsa, örneğin ilk PROPRIETARIO ve CORRETOR, ikinci INQUILINO ve son IMOVEL'i yarattım ve bu şekilde her şey çalıştı. Neden hepsini "tek bir komutla" oluşturarak yarattığımı anlayamıyorum.

cevap

2

Bu tam metni çalıştırıyor musunuz? Öyleyse, referans verdikleri tabloları gerçeklemeden önce yabancı anahtarları oluşturmaya çalışıyorsunuz gibi görünüyor.

Oluşturduğunuz sırayı değiştirmeyi deneyin.

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! İşe yaradı. Şu an ne kadar aptalım! Sadece MySQL ile başlıyor. Yardımın için teşekkürler, yine de! –

+0

Sorun değil. Bu şeyleri yıllardır yapmış olan insanlar bile geçmişte bariz görünen hatalar yaparlar. Bu konuda kötü hissetme, hepsi öğrenme sürecinin bir parçası. İyi şanslar! –