MySQL错误1215,我做错了什么?

我试图创建一个数据库,其中包含员工信息,例如姓名,时间表,预订的假期等,以及有关正在执行的项目以及项目所针对的公司的信息。 我的代码如下:

    CREATE TABLE IF NOT EXISTS tblcompany (
    companyid INT(11) UNSIGNED NOT NULL,
    custfirst VARCHAR(50),
    custlast VARCHAR(50),
    company VARCHAR(50),
    custphone VARCHAR(50),
    custemail VARCHAR(50),
    PRIMARY KEY (companyid),
    INDEX (companyid),
    CONSTRAINT FOREIGN KEY (companyid)
        REFERENCES tblproject (companyid)
)  ENGINE=InnoDB;

CREATE TABLE IF NOT EXISTS tblemployee (
    employeeid INT(11) UNSIGNED NOT NULL,
    employeefirst VARCHAR(50),
    employeelast VARCHAR(50),
    employeephone VARCHAR(50),
    employeeemail VARCHAR(50),
    PRIMARY KEY (employeeid),
    INDEX (employeeid),
    CONSTRAINT FOREIGN KEY (employeeid)
        REFERENCES tbltimesheet (employeeid),
    CONSTRAINT FOREIGN KEY (employeeid)
        REFERENCES tblholiday (employeeid),
    CONSTRAINT FOREIGN KEY (employeeid)
        REFERENCES tblannualleave (employeeid)
)  ENGINE=InnoDB;

CREATE TABLE IF NOT EXISTS tblholiday (
    holidayid INT(11) UNSIGNED NOT NULL,
    employeeid INT(11) UNSIGNED NOT NULL,
    holidayfrom DATE,
    holidayto DATE,
    holidayhalfday BOOLEAN,
    holidayreason VARCHAR(50),
    INDEX (employeeid),
    PRIMARY KEY (holidayid)
)  ENGINE=InnoDB;

CREATE TABLE IF NOT EXISTS tblannualleave (
    annualleaveid INT(11) UNSIGNED NOT NULL,
    employeeid INT(11) UNSIGNED NOT NULL,
    annualleavetaken INT(11),
    annualleaveremain INT(11),
    anuualleavetotal INT(11),
    INDEX (employeeid),
    PRIMARY KEY (annualleaveid)
)  ENGINE=InnoDB;

CREATE TABLE IF NOT EXISTS tblproject (
    projectid INT(11) UNSIGNED NOT NULL,
    projectname VARCHAR(50),
    projecttype VARCHAR(50),
    companyid INT(11) UNSIGNED NOT NULL,
    projectnotes VARCHAR(50),
    PRIMARY KEY (projectid),
    INDEX (projectid),
    CONSTRAINT FOREIGN KEY (projectid)
        REFERENCES tbltimesheet (projectid)
)  ENGINE=InnoDB;

CREATE TABLE IF NOT EXISTS tbltimesheet (
    timesheetid INT(11) UNSIGNED NOT NULL,
    employeeid INT(11) UNSIGNED NOT NULL,
    projectid INT(11) UNSIGNED NOT NULL,
    timesheetdate DATE,
    timesheethours INT(11),
    timesheetnotes VARCHAR(50),
    INDEX (employeeid),
    PRIMARY KEY (timesheetid)
)  ENGINE=InnoDB;

我一直在环顾四周,尝试了一切,这可能很简单。 我已将所有数据类型更改为类似的数据类型,以查看这是否可以解决问题,但没有运气。 我得到的错误代码是:

错误代码:1215.无法添加外键约束0.063秒

CREATE TABLE IF NOT EXISTS tblcompany(companyid INT(11)UNSIGNED NOT NULL,custfirst VARCHAR(50),custlast VARCHAR(50),
公司VARCHAR(50),custphone VARCHAR(50),custemail VARCHAR(50),PRIMARY KEY(companyid),INDEX(companyid),
CONSTRAINT FOREIGN KEY(companyid)REFERENCES tblproject(companyid))ENGINE = InnoDB

11:15:57 CREATE TABLE IF NOT EXISTS tblcompany(companyid INT(11)UNSIGNED NOT NULL,custfirst VARCHAR(50),custlast VARCHAR(50),company VARCHAR(50),custphone VARCHAR(50),
custemail VARCHAR(50),PRIMARY KEY(companyid),INDEX(companyid),CONSTRAINT FOREIGN KEY(companyid)REFERENCES tblproject(companyid))ENGINE = InnoDB错误代码:1215.无法添加外键约束0.063秒

谢谢你看..


在引用它之前先创建表tblproject。

除了错误的表顺序之外,您需要在引用列上使用主键或唯一键。

SQL小提琴


我认为你会以相反的顺序解决你的问题,否则你将会遇到与tblemployee相同的问题。

Foreigh Key需要参考表已经存在。


当它所引用的表尚不存在时,您不能创建外键。 您可以随时创建外键。

在使用外键创建表之后,您必须首先创建包含引用字段的表。

您也可以先创建所有表,然后在第二步中创建所有外键。

链接地址: http://www.djcxy.com/p/15131.html

上一篇: MySQL error 1215, what am I doing wrong?

下一篇: SQL Join Types and Performance: Cross vs Inner