表创建期间的MySQL外键格式

时间:2018-04-25 14:22:39

标签: mysql

我遇到了一个奇怪的情况。我有两张表最初看起来像这样:

CREATE TABLE vendor_orders (

    vendor_order_id  INT UNSIGNED NOT NULL AUTO_INCREMENT,
    vendor_id        INT UNSIGNED NOT NULL,
    [...]
    created_at       TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
    updated_at       DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,

    PRIMARY KEY (vendor_order_id),
    FOREIGN KEY (vendor_id) REFERENCES vendors(vendor_id)
) ENGINE=InnoDB CHARACTER SET=utf8mb4;

但是,在检查数据库之后,我发现没有创建vendor_orders的表定义中的外键。然后我试着像这样创建第二个表:

@GetMapping("/events")
public Mono<ServerResponse> getEvents() {
    return ServerResponse.ok()
              .contentType(APPLICATION_JSON)
              .build();
}

这很有用,我的外键已经创建了。谁能告诉我两种格式之间有什么区别?我认为两者都应该是等价的。我正在使用MySQL 5.6.33。

1 个答案:

答案 0 :(得分:1)

您的期望是正确的,您在第一个示例中使用的references关键字应该创建foreign key,但它不会那样工作。你不是第一个碰到这个MySQL bug的人。解决方案是避免使用内联foreign key定义,并像第二个示例中那样明确写出foreign key