mysql 键约束中缺少索引[重复]

fumotvh3  于 2023-01-04  发布在  Mysql
关注(0)|答案(1)|浏览(368)
    • 此问题在此处已有答案**:

Error Code: 1822. Failed to add the foreign key constraint. Missing index for constraint 'projects_ibfk_1' in the referenced table 'employees'(1个答案)
21小时前关门了。
我有一个错误的约束,这是具体的索引fk_Pedido4,最后一段,这将有助于很多,如果有人可以帮助。

CREATE TABLE Cliente (
    CPF real PRIMARY KEY,
    Nome Varchar (55),
    Endereco VARCHAR (55),
    Contato real
);

CREATE TABLE Funcionarios (
    Registro INT PRIMARY KEY,
    Carteira_Trabalho REAL,
    Nome varchar(55),
    Contato REAL,
    CNH REAL,
    Tipo_Funcionario INT
);

CREATE TABLE Pizza (
    Codigo INT PRIMARY KEY,
    Sabores CHAR,
    Ingredientes CHAR
);

CREATE TABLE Pedido (
    Numero INT,
    Observacoes VARCHAR(55),
    Cliente real,
    Data DATE,
    Hora TIME,
    Pizza INT,
    Codigo_Cozinheiro INT,
    Codigo_Atendente INT,
    Codigo_Entregador INT,
    PRIMARY KEY (Numero, Data)
);
 
ALTER TABLE Pedido ADD CONSTRAINT FK_Pedido_2
    FOREIGN KEY (Cliente)
    REFERENCES Cliente (CPF)
    ON DELETE RESTRICT;
 
ALTER TABLE Pedido ADD CONSTRAINT FK_Pedido_3
    FOREIGN KEY (Pizza)
    REFERENCES Pizza (Codigo)
    ON DELETE RESTRICT;
 
<sub>ALTER TABLE Pedido ADD CONSTRAINT FK_Pedido_4
    FOREIGN KEY (Codigo_Cozinheiro, Codigo_Atendente, Codigo_Entregador)
    REFERENCES Funcionarios (Registro, Registro, Registro)
    ON DELETE CASCADE;</sub>

我只是期待一个语法错误,我没有看到,由于缺乏经验,在这种语言...

j8ag8udp

j8ag8udp1#

外键表示父表中必须正好有一行具有给定的键。

ALTER TABLE Pedido ADD CONSTRAINT FK_Pedido_4
FOREIGN KEY (Codigo_Cozinheiro, Codigo_Atendente, Codigo_Entregador)
REFERENCES Funcionarios (Registro, Registro, Registro)
ON DELETE CASCADE;

这里您说父表Funcionarios必须有一行的键(注册,注册,注册)匹配Pedido(Codigo_Cozinheiro,Codigo_Atendente,Codigo_Entregador)。首先,没有密钥(Registro,Registro,Registro)在Funcionarios中。关键是单列即使我们创建这样的密钥,也不会有Registro匹配Codigo_Cozinheiro、Codigo_Atendente、和Codigo_Entregador同时出现。
您希望每个codigo都有一个外键,因此Codigo_Cozinheiro必须在Funcionarios中有一个匹配项,Codigo_Atendente必须在Funcionarios中有一个匹配项,Codigo_Entregador必须在Funcionarios中有一个匹配项。

ALTER TABLE Pedido ADD CONSTRAINT FK_Pedido_4
FOREIGN KEY (Codigo_Cozinheiro)
REFERENCES Funcionarios (Registro)
ON DELETE CASCADE;

ALTER TABLE Pedido ADD CONSTRAINT FK_Pedido_5
FOREIGN KEY (Codigo_Atendente)
REFERENCES Funcionarios (Registro)
ON DELETE CASCADE;

ALTER TABLE Pedido ADD CONSTRAINT FK_Pedido_6
FOREIGN KEY (Codigo_Entregador)
REFERENCES Funcionarios (Registro)
ON DELETE CASCADE;

相关问题