语法错误外键

时间:2016-09-05 00:45:40

标签: php mysql

我是php / sql的新手,我在使用外键的行上遇到语法错误。

语法错误或访问冲突:1064

    $createQuery ="CREATE TABLE AthleteTable
    (
        athleteID   INT(6) NOT NULL AUTO_INCREMENT,
        lastName    VARCHAR(20) NOT NULL,
        firstName   VARCHAR(30) NOT NULL,
        gender      CHAR(1) NOT NULL,
        image       VARCHAR(20) NOT NULL,
        eventID     INT(6) NOT NULL, 
        medal       VARCHAR(6) NOT NULL,

        CONSTRAINT foreign FOREIGN KEY (eventID) REFERENCES eventsTable(eventID),
        PRIMARY KEY(athleteID)

    )";

如果有人知道什么是错的话会感激一些帮助。

------------>

新错误:

  

插入数据AthleteTable失败SQLSTATE [23000]:完整性   约束违规:1452无法添加或更新子行:异类   键约束失败(powlz1_in612AthleteTable,CONSTRAINT   AthleteTable_ibfk_1外键(eventID)参考eventsTable   (eventID))

这是我制作表格的地方:

$createQuery ="CREATE TABLE eventsTable
    (
        eventID     INT(6) NOT NULL AUTO_INCREMENT,
        sport       VARCHAR(20) NOT NULL,
        event       VARCHAR(30) NOT NULL,

        PRIMARY KEY (eventID)

    )";
    $pdo->exec($createQuery);

    $createQuery ="CREATE TABLE AthleteTable
    (
        athleteID       INT(6) NOT NULL AUTO_INCREMENT,
        firstName       VARCHAR(20) NOT NULL,
        lastName        VARCHAR(20) NOT NULL,
        gender          VARCHAR(20) NOT NULL,
        image           VARCHAR(20) NOT NULL,
        eventID         INT(20) NOT NULL,
        medal           VARCHAR(6) NOT NULL,

        CONSTRAINT SportEvents FOREIGN KEY (`eventID`) REFERENCES      eventsTable(`eventID`),
        PRIMARY KEY(`athleteID`)

    )";
    $pdo->exec($createQuery);
在查看其他问题之后,这一切似乎都是一个缺失的领域,但这两个表都包含一个eventID,所以我不明白为什么它失败了?

1 个答案:

答案 0 :(得分:3)

$createQuery ="CREATE TABLE AthleteTable
(
    athleteID   INT(6) NOT NULL AUTO_INCREMENT,
    lastName    VARCHAR(20) NOT NULL,
    firstName   VARCHAR(30) NOT NULL,
    gender      CHAR(1) NOT NULL,
    image       VARCHAR(20) NOT NULL,
    eventID     INT(6) NOT NULL, 
    medal       VARCHAR(6) NOT NULL,

    CONSTRAINT  FOREIGN KEY (eventID) REFERENCES eventsTable(eventID),
    PRIMARY KEY(athleteID)

)";

你有两次FOREIGN这个词。这解决了你的1064。

请阅读以下评论,了解由于参考表格中的设置问题而导致的1452错误。