我在 MySQL 中创建表时遇到问题。本质上,我需要一个使用“client_id”和“problem_id”的复合键。在“clients”表中,“client_id”是主键,所以我想保持这种关系,“problem_id”需要自动递增。
CREATE TABLE problems (
client_id BIGINT(10) NOT NULL REFERENCES clients(client_id),
problem_id INT NOT NULL AUTO_INCREMENT,
status CHAR(1) NOT NULL,
description VARCHAR(100) NOT NULL,
start_date VARCHAR(10) NOT NULL,
end_date VARCHAR(10),
PRIMARY KEY (client_id, problem_id)
);
MySQL 不会接受这个,但对我来说这似乎是合乎逻辑的。我怎样才能得到这样的表?
最佳答案
两个问题:
InnoDB 要求 auto_increment 列是主键中的第一列。
InnoDB 不支持列级
REFERENCES
语法,只支持表级FOREIGN KEY
约束语法。
这应该有效:
CREATE TABLE problems (
client_id BIGINT(10) NOT NULL,
problem_id INT NOT NULL AUTO_INCREMENT,
status CHAR(1) NOT NULL,
description VARCHAR(100) NOT NULL,
start_date VARCHAR(10) NOT NULL,
end_date VARCHAR(10),
PRIMARY KEY (problem_id, client_id),
FOREIGN KEY (client_id) REFERENCES clients(client_id)
);
但是,这意味着您的聚簇索引(主键)将有利于查找 按 problem_id,但不是按 client_id 查找。
关于mysql - 复合键 - 一个外键,另一个自动递增,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17706289/