【问题标题】:MySQL ERROR 1215 (HY000): Cannot add foreign key constraintMySQL ERROR 1215 (HY000): 无法添加外键约束
【发布时间】:2014-03-27 15:15: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;

非常感谢您的帮助。

【问题讨论】:

  • 一切看起来都很好。请确保 VARCHAR 字段的 CHARACTER SET 和 COLLATION 相同。
  • 根据 MySQL 的版本,您可能需要在用作 FK 的 pedidos 列上创建索引
  • 外键只能引用主列或唯一列。
  • 请查看此链接。让我通知http://stackoverflow.com/questions/18930084/mysql-error-1215-hy000-cannot-add-foreign-key-constraint
  • mysql 也忽略了检查约束。

标签: mysql sql database foreign-keys


【解决方案1】:

在您的 ARTICULOS 表中,您有多个列作为主键。即文章,cod_fabricante,比索,类别。在 PEDIDOS 表中,您将外键 articulo 引用到 ARTUCULOS 表的 articulo 列。我认为这是错误的。

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

【讨论】:

  • 非常感谢!!这就是问题所在。如果没有你的帮助,永远不会弄明白。当我以这种方式更改 PEDIDOS 表时: FOREIGN KEY (articulo,cod_fabricante,peso,categoria) 在 DELETE CASCADE 上引用了 ARTICULOS (articulo,cod_fabricante,peso,categoria),而不是使用拆分外键,它产生了奇迹。
  • 非常感谢!
猜你喜欢
  • 2013-09-26
  • 2018-09-09
  • 1970-01-01
  • 1970-01-01
  • 2014-08-24
  • 1970-01-01
  • 2021-09-24
  • 2017-09-01
  • 1970-01-01
相关资源
最近更新 更多