如何创建级联主键?

How to create concatened primary key?

您好,我是 MySQL 的新手,但我想根据在其他两个表中创建的两个主键创建一个唯一 ID。

下面是我们感兴趣的部分:

CREATE TABLE patient(
id_patient int NOT NULL AUTO_INCREMENT,
...,
PRIMARY KEY (id_patient))

CREATE TABLE surgeon(
id_surgeonint NOT NULL AUTO_INCREMENT,
...,
PRIMARY KEY (id_surgeon))

CREATE TABLE  case(
id_patient int NOT NULL,
id_surgeon int NOT NULL,
CONSTRAINT FK_case_patient FOREIGN KEY (id_patient) REFERENCES patient(id_patient),
CONSTRAINT FK_case_surgeon FOREIGN KEY (id_surgeon) REFERENCES surgeon(id_surgeon),
CONSTRAINT id_case PRIMARY KEY (id_patient, `_`,id_surgeon));

我想我不明白这个窍门。我想要以下结果:

SELECT * FROM case;

id_case  | id_patient | id_surgeon    
32_56    |     32     |     56
18_66    |     18     |     66

我知道计算速度不会是最优的,但是这个id-case确实是必要的并且必须在select

您可以创建一个计算列,如果您真的想要它的值在磁盘上,您可以保留计算列

CREATE TABLE  case(
id_patient int NOT NULL,
id_surgeon int NOT NULL,
id_case varchar(30) AS CONCAT(id_patient, '_', id_surgeon),
CONSTRAINT FK_case_patient FOREIGN KEY (id_patient) REFERENCES patient(id_patient),
CONSTRAINT FK_case_surgeon FOREIGN KEY (id_surgeon) REFERENCES surgeon(id_surgeon),
CONSTRAINT pk_case PRIMARY KEY (id_patient,id_surgeon));

但是,除非您要求这对(患者、外科医生)唯一标识一个病例,否则您应该考虑添加一个额外的字段(例如手术日期)