【问题标题】:MySQL error code 1005 / errno: 150MySQL错误代码1005 / errno:150
【发布时间】:2016-07-27 00:02:33
【问题描述】:

我使用 XAMPP 5.6.19-0 作为 MySQL 数据库服务器并通过 MySQL Workbench (Mac OS 10.11.3) 进行管理。我正在尝试使用外键创建一些表,但出现此错误:

错误代码:1005。无法创建表imobiliaria24h.proprietario(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;

有趣的是,如果我单独创建表,只有那些相互引用的表,例如,我创建了第一个 PROPRIETARIO 和 CORRETOR,第二个 INQUILINO,最后是 IMOVEL,这样一切正常。我不明白为什么我会在“单个命令”中将它们全部创建在一起时出现错误。

【问题讨论】:

    标签: mysql xampp mysql-workbench


    【解决方案1】:

    您正在运行那个确切的脚本吗?如果是这样,您似乎是在实际创建外键引用的表之前尝试创建外键。

    尝试更改构建它们的顺序。

    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;
    

    【讨论】:

    • 宾果游戏!有效。我现在感觉多么愚蠢!只是从 MySQL 开始。不过,感谢您的帮助!
    • 没问题。即使是多年来一直在做这些事情的人也会犯一些事后看来很明显的错误。不要为此感到难过,这都是学习过程的一部分。祝你好运!
    猜你喜欢
    • 2018-04-14
    • 2012-06-22
    • 1970-01-01
    • 2013-07-22
    • 1970-01-01
    • 2016-08-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多