外键约束是错误形成的错误

时间:2020-05-22 08:48:14

标签: mysql mariadb

有人可以帮我解决tuhis问题吗?

CREATE TABLE PATOLOGIE(
    id_patologia int PRIMARY KEY AUTO_INCREMENT,
    nome varchar(40) NOT NULL
)ENGINE= InnoDB DEFAULT CHARSET=latin1;

CREATE TABLE RICOVERO(
    paziente int NOT NULL, 
    reparto int NOT NULL,
    dataora_inizio datetime NOT NULL,
    dataora_fine datetime ,
    esito tinyint,
    score double,
    colore tinyint,
    dataora_obi datetime,
    dataora_triage datetime,
    PRIMARY KEY(reparto, dataora_inizio, paziente),
    FOREIGN KEY (reparto) REFERENCES REPARTI (id_reparto),
    FOREIGN KEY (paziente) REFERENCES ANAGRAFICA (id)
)ENGINE =InnoDB DEFAULT CHARSET=latin1;

CREATE TABLE RICOVERO_PATOLOGIE(
    paziente int NOT NULL, 
    reparto int NOT NULL,
    dataora_inizio datetime NOT NULL,
    patologia int NOT NULL,
    data_patologia date NOT NULL,
    FOREIGN KEY (patologia) REFERENCES PATOLOGIE (id_patologia),
    PRIMARY KEY (paziente, reparto, dataora_inizio, patologia)
)ENGINE =InnoDB DEFAULT CHARSET=latin1;

ALTER TABLE RICOVERO_PATOLOGIE  
   ADD CONSTRAINT fk_r 
      FOREIGN KEY (paziente, dataora_inizio, reparto) REFERENCES RICOVERO (paziente, dataora_inizio, reparto) 
      ON UPDATE CASCADE 
      ON DELETE CASCADE;

1 个答案:

答案 0 :(得分:0)

ALTER TABLE语句中的列顺序错误。更改:

FOREIGN KEY (paziente, dataora_inizio, reparto) 
REFERENCES RICOVERO (paziente, dataora_inizio, reparto) 

收件人:

FOREIGN KEY (reparto, dataora_inizio, paziente) 
REFERENCES RICOVERO (reparto, dataora_inizio, paziente) 

定义外键时,列顺序很重要。