MySQL错误#1005(代码150)

时间:2012-06-20 18:24:20

标签: mysql mysql-error-1005

我试过创建这个表,但我没有尝试过FK的工作。

CREATE TABLE `tb_AutSituacao` (
 `id` int(11) NOT NULL AUTO_INCREMENT,
 `Nome` varchar(50) CHARACTER SET latin1 NOT NULL,
 PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8

CREATE TABLE `tb_AutHistorico` (
 `id` int(11) NOT NULL AUTO_INCREMENT,
 `Situacao` int(11) NOT NULL,
 `Data` date NOT NULL,
 `Agente` int(11) NOT NULL,
 `Proposta` int(11) NOT NULL,
 PRIMARY KEY (`id`),
 KEY `AutHistorico_Situacao` (`Situacao`)
) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8

ALTER TABLE `tb_AutHistorico` ADD FOREIGN KEY ( `Situacao` ) REFERENCES `sicor`.`tb_AutSituacao` (`id`) ON DELETE RESTRICT ON UPDATE RESTRICT;

我总是得到“#1005 - 无法创建表'tablename'(错误号码:150)”。谢谢你的帮助。

2 个答案:

答案 0 :(得分:1)

$ perror 150
MySQL error code 150: Foreign key constraint is incorrectly formed

修正您的FOREIGN KEY定义。

答案 1 :(得分:1)

您的外键约束定义存在问题(请参阅http://dev.mysql.com/doc/refman/5.7/en/innodb-foreign-key-constraints.html - 最后一段进行调试)

发生此错误时,定义本身不正确(语法错误)或者引用的内容存在问题。你的语法是正确的,什么是引用是正确的,所以它很可能是模式引用。

我可以在我的结尾处运行语句,但是我必须在create table名称前加上模式名称。否则,MySQL将假定您正在尝试为当前使用的数据库创建表。请参阅以下修改后的声明:

#ifndef HANDLER_H
#define HANDLER_H

#include <qxml.h>
#include "structs.h"
#include "imageloader.h"
#include <qfile.h>
#include <QDebug>
#include <iostream>

class Handler : public QXmlDefaultHandler
{
public:
    bool startDocument();
    bool startElement(const QString &, const QString &, const QString &qName,
                       const QXmlAttributes &atts);
    bool endElement(const QString &, const QString &, const QString &);

    bool fatalError(const QXmlParseException &exception);
    QStringList& attributes();
    QStringList& names();
    QStringList& attributeName();
    QList<int>& anzahl();
    QList<int>& indentations();

private:
    int indentationLevel;
    QStringList elementName;
    QStringList elementAttributes;
    QStringList elementAttributeName;
    QList<int> elementAnzahl;
    QList<int> elementIndentation;
};

#endif

另请注意,创建表后不必定义约束,而是可以将其包含在创建定义中,如上所示。