首页 > 解决方案 > 引用时无法在mysql中创建表

问题描述

CREATE TABLE `DB`.`ORDER` (
    `oid`               INT NOT NULL UNIQUE AUTO_INCREMENT,
    `createdAt`         TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
    `oValue`            FLOAT NOT NULL,
    `no`                INT NOT NULL,
    `qty`               INT NOT NULL,
    `status`            VARCHAR(20) NOT NULL,
    `refundStatus`      VARCHAR(10),
    `refundId`          INT,
    `paymentStatus`     VARCHAR(10),
    `paymentId`         INT,
    `aid`               INT,
    PRIMARY KEY(`oid`),
    FOREIGN KEY `aid` REFERENCES ADDR(`aid`)
)
ENGINE = InnoDB;

带有键的 ADDR 表aid确实存在于数据库中,但运行此命令时出现错误。

错误:

CREATE TABLE `DB`.`ORDER` (
    `oid`               INT NOT NULL UNIQUE AUTO_INCREMENT,
    `createdAt`         TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
    `oValue`            FLOAT NOT NULL,
    `no`                INT NOT NULL,
    `qty`               INT NOT NULL,
    `status`            VARCHAR(20) NOT NULL,
    `refundStatus`      VARCHAR(10),
    `refundId`          INT,
    `paymentStatus`     VARCHAR(10),
    `paymentId`         INT,
    `aid`               INT,
    PRIMARY KEY(`oid`),
    FOREIGN KEY `aid` REFERENCES ADDR(`aid`)
)
ENGINE = InnoDB
MySQL said: Documentation

#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'REFERENCES ADDR(`aid`)
)
ENGINE = InnoDB' at line 14

我无法弄清楚为什么在这种情况下会发生而不是在其他情况下发生。

标签: mysqlsqlcreate-table

解决方案


代替:

FOREIGN KEY `aid` REFERENCES ADDR(`aid`)

和:

FOREIGN KEY (`aid`) REFERENCES ADDR(`aid`)

或使用官方标准 SQL语法:

constraint fk1 FOREIGN KEY (`aid`) REFERENCES ADDR (`aid`)

推荐阅读