当前位置: 首页 > 知识库问答 >
问题:

MySQL错误1215(HY000):无法添加外键约束

刘棋
2023-03-14

关于这个错误,我到处都找过,也看过很多例子,但我还是想不出我的脚本有什么问题。如果这是一个常见的问题,我很抱歉,但到目前为止,搜索它对我没有帮助。剧本如下:

CREATE DATABASE IF NOT EXISTS ventas;
USE ventas

CREATE TABLE TIENDAS (
nif varchar(10) not null,
nombre varchar(20),
direccion varchar(20),
poblacion varchar(20),
provincia varchar(20) check (provincia = upper(provincia)),
codpostal int(5),
PRIMARY KEY (nif)
) ENGINE=INNODB;

CREATE TABLE FABRICANTES (
cod_fabricante int(3) not null,
nombre varchar(15) check (nombre = upper(nombre)),
pais varchar(15) check (pais = upper(pais)),
PRIMARY KEY (cod_fabricante)
) ENGINE=INNODB;

CREATE TABLE ARTICULOS (
articulo varchar(20) not null,
cod_fabricante int(3) not null,
peso int(3) unsigned not null CHECK (peso > 0),
categoria varchar(10) not null,
precio_venta int(4) unsigned CHECK (precio_venta > 0),
precio_costo int(4) unsigned CHECK (precio_costo > 0),
existencias int(5),
PRIMARY KEY (articulo,cod_fabricante,peso,categoria),
FOREIGN KEY (cod_fabricante) references FABRICANTES (cod_fabricante)
) ENGINE=INNODB;

CREATE TABLE PEDIDOS (
nif varchar(10) not null,
articulo varchar(20) not null,
cod_fabricante int(3) not null,
peso int(3) unsigned not null CHECK (peso > 0),
categoria varchar(10) not null,
fecha_pedido date not null,
unidades_pedidas int(4),
PRIMARY KEY (nif,articulo,cod_fabricante,peso,categoria,fecha_pedido),
FOREIGN KEY (cod_fabricante) references FABRICANTES (cod_fabricante),
FOREIGN KEY (articulo) references ARTICULOS (articulo) ON DELETE CASCADE,
FOREIGN KEY (cod_fabricante) references ARTICULOS (cod_fabricante) ON DELETE CASCADE,
FOREIGN KEY (peso) references ARTICULOS (peso) ON DELETE CASCADE,
FOREIGN KEY (categoria) references ARTICULOS (categoria) ON DELETE CASCADE,
FOREIGN KEY (nif) references TIENDAS (nif)
) ENGINE=INNODB;

非常感谢你的帮助。

共有1个答案

牧献
2023-03-14

在ARTICULOS表中,有多个列作为主键。Articino,cod_fabricante,peso,categoria。在PEDIDOS表中,您将外键articulo引用到ARTUCULOS表的articulo列。我认为这是错误的。

根据SQL标准,外键必须引用父表的主键或唯一键。如果主键有多列,则外键的列数和顺序必须相同

 类似资料:
  • 问题内容: 我正在尝试为体育馆管理系统创建数据库,但无法弄清楚为什么会出现此错误。我试图在这里搜索答案,但找不到。 这是父表。 你们能帮我解决这个问题吗?谢谢。 问题答案: 为了将字段定义为,引用的父字段必须在其上定义了索引。 根据有关约束的文档: 参考parent_tbl_name(index_col_name,…) 定义上,和分别。并确保子列定义必须与其父列定义匹配。 更改表定义如下: 更改表

  • 问题内容: 我已经阅读了 Silberschatz的 数据库系统概念 ,第6版。我将在MySQL的OS X上实现第2章所示的大学数据库系统。但是我在创建表时遇到了麻烦。桌子看起来像 __ 创建表将导致以下错误。 在google搜索外键约束之后,我刚刚了解到“外键约束”一词表示来自表中外键列的数据必须存在于表的主键列中。但是我应该在插入数据时遇到此错误。 如果没有,为什么作者让我执行该SQL语句?

  • 问题内容: 我正在尝试将新模式转发工程到我的数据库服务器上,但是我不知道为什么会收到此错误。我试图在这里搜索答案,但是我发现的所有内容都说是将db引擎设置为Innodb或确保要用作外键的键是它们自己表中的主键。如果我没记错的话,我都做过这两件事。你们还有其他帮助吗? SQL脚本执行完成:语句:成功7次​​,失败1次 这是父表的SQL。 问题答案: 我猜,和/或不完全相同的数据类型和。 也许父表中的

  • 引用的表是“组”(InnoDB)。 它有一个“id”列,定义为INT(11),不可为空,自动递增,主键 引用表为“用户(InnoDB)” 它的group_id列定义为INT(11),不可为空。 在引用表中已经存在一个基于“group_id”列的唯一索引 但是whn正在执行 我出错了 错误:1215无法添加外键约束 我添加db转储 检查清单 Db是InnoDB吗?是的 所有表都是InnoDB吗?是的

  • 我正在尝试使用artisan创建外键,但出现了此错误。 这是我的迁移: 在批次表中,我使用作为it模型批次。我补充说: 知道如何解决这个错误吗?