我遇到了一个奇怪的情况。我有两张表最初看起来像这样:
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。
答案 0 :(得分:1)
您的期望是正确的,您在第一个示例中使用的references关键字应该创建foreign key
,但它不会那样工作。你不是第一个碰到这个MySQL bug的人。解决方案是避免使用内联foreign key
定义,并像第二个示例中那样明确写出foreign key
。