我试过创建这个表,但我没有尝试过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)”。谢谢你的帮助。
答案 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
另请注意,创建表后不必定义约束,而是可以将其包含在创建定义中,如上所示。