gpt4 book ai didi

mysql - 错误 #1215 - 无法在 DELETE SET NULL 上添加外键约束

转载 作者:行者123 更新时间:2023-11-29 09:58:15 27 4
gpt4 key购买 nike

我已经尝试了几个小时来添加具有引用完整性的查询,但它指示错误,但如果我删除它们,查询运行良好。我只把它们放在lotes和operaciones table 上。

CREATE DATABASE alamilla;
USE alamilla;


CREATE TABLE cat_niveles(
id INT(11) AUTO_INCREMENT,
nombre VARCHAR(255),
PRIMARY KEY (id)
)ENGINE=INNODB;

INSERT INTO cat_niveles VALUES(NULL, 'ADMINISTRADOR');
INSERT INTO cat_niveles VALUES(NULL, 'VENTA');
INSERT INTO cat_niveles VALUES(NULL, 'ALTA');


CREATE TABLE categorias_medicamentos(
id INT(11) AUTO_INCREMENT,
nombre VARCHAR(255),
PRIMARY KEY(id)
)ENGINE=INNODB;

CREATE TABLE corte_cajas(
id INT(11) AUTO_INCREMENT,
fecha_corte DATETIME,
PRIMARY KEY(id)
)ENGINE=INNODB;

CREATE TABLE proveedores(
id INT(11) AUTO_INCREMENT,
nombre VARCHAR(255) NOT NULL,
apellidos VARCHAR(255) NOT NULL,
compania VARCHAR(100) NOT NULL,
direccion VARCHAR(100) NULL,
telefono1 VARCHAR(100) NULL,
telefono2 VARCHAR(100) NULL,
fecha_alta DATETIME DEFAULT CURRENT_TIMESTAMP,
PRIMARY KEY(id)
)ENGINE=INNODB;

CREATE TABLE medicamentos(
cve_medicamento VARCHAR(255) NOT NULL,
nombre_generico VARCHAR(255) NOT NULL,
nombre_comercial VARCHAR(255) NULL,
descripcion VARCHAR(255) NULL,
imagen VARCHAR(255) NULL,
presentacion VARCHAR(255) NULL,
precio_adquisitivo DECIMAL(15,2) NOT NULL,
precio_venta DECIMAL(15,2) NOT NULL,
unidades_caja INT(11) NOT NULL,
stock_minimo INT(11) NOT NULL,
fecha_alta DATETIME DEFAULT CURRENT_TIMESTAMP,
id_proveedor INT(11) NULL,
id_categoria INT(11) NULL,
PRIMARY KEY(cve_medicamento),
FOREIGN KEY(id_proveedor) REFERENCES proveedores(id)

)ENGINE=INNODB;

CREATE TABLE tipo_operaciones(
id INT(11) AUTO_INCREMENT,
nombre VARCHAR(255) NOT NULL,
PRIMARY KEY(id)
)ENGINE=INNODB;

CREATE TABLE lotes(
cve_lote VARCHAR(255) NOT NULL,
fecha_alta DATETIME DEFAULT CURRENT_TIMESTAMP,
fecha_caducidad DATE,
cve_medicamento VARCHAR(255) NOT NULL,
PRIMARY KEY(cve_lote),
FOREIGN KEY(cve_medicamento) REFERENCES medicamentos(cve_medicamento) ON DELETE SET NULL ON UPDATE CASCADE
)ENGINE=INNODB;


CREATE TABLE pedidos(
id INT(11) AUTO_INCREMENT,
dinero DECIMAL(15, 2) NULL,
total DECIMAL(15,2) NULL,
descuento DECIMAL(15, 2) NULL,
fecha DATETIME NULL,
id_tipo_operacion INT(11) NULL,
id_proveedor INT(11) NULL,
id_corte_caja INT(11) NULL,
id_usuario INT(11) NULL,
PRIMARY KEY(id),
FOREIGN KEY(id_tipo_operacion) REFERENCES tipo_operaciones(id),
FOREIGN KEY(id_proveedor) REFERENCES proveedores(id),
FOREIGN KEY(id_corte_caja) REFERENCES corte_cajas(id)
)ENGINE=INNODB;


CREATE TABLE operaciones(
id INT(11) AUTO_INCREMENT,
cantidad INT(11) NULL,
descuento DECIMAL(15,2) NULL,
precio DECIMAL(15,2) NULL,
id_tipo_operacion INT(11) NULL,
id_medicamento VARCHAR(255) NULL,
id_pedido INT(11) NULL,
cve_lote VARCHAR(255) NULL,
PRIMARY KEY(id),
FOREIGN KEY(id_tipo_operacion) REFERENCES tipo_operaciones(id),
FOREIGN KEY(id_medicamento) REFERENCES medicamentos(cve_medicamento) ON DELETE SET NULL ON UPDATE CASCADE,
FOREIGN KEY(id_pedido) REFERENCES pedidos(id),
FOREIGN KEY(cve_lote) REFERENCES lotes(cve_lote) ON DELETE SET NULL ON UPDATE CASCADE
)ENGINE=INNODB;

CREATE TABLE usuarios(
id INT(11) AUTO_INCREMENT,
nick VARCHAR(100) NOT NULL,
pass VARCHAR(255) NOT NULL,
nombre VARCHAR(100) NOT NULL,
apellidos VARCHAR(100) NOT NULL,
bloque TINYINT(2) NOT NULL,
foto VARCHAR(255),
id_nivel INT(11) NOT NULL,
PRIMARY KEY(id),
FOREIGN KEY(id_nivel) REFERENCES cat_niveles(id)
)ENGINE=INNODB;

INSERT INTO usuarios VALUES(NULL, 'admin','d033e22ae348aeb5660fc2140aec35850c4da997','ALBERTO','ALAMILLA MURILLO', 1, 'foto_perfil/ADMINISTRADOR.png', 1);

INSERT INTO `categorias_medicamentos` (`id`, `nombre`) VALUES
(null, 'BAÑOS'),
(null, 'COLUTORIOS'),
(null, 'COMPRIMIDOS'),
(null, 'ELIXIRES'),
(null, 'GOTAS'),
(null, 'GOTAS NASALES'),
(null, 'INHALADORES'),
(null, 'JARABE'),
(null, 'LOCIONES'),
(null, 'MEDICAMENTO DE PRUEBA'),
(null, 'NEBULIZACIONES'),
(null, 'PARCHES TRANDERMICOS'),
(null, 'POLVOS'),
(null, 'POMADAS RECTALES'),
(null, 'SELLOS'),
(null, 'SUPOSITORIOS'),
(null, 'SUSPENSION'),
(null, 'TABLETAS');

我总是收到错误#1215 无法添加外键约束一只手不是一个坏主意,谢谢。 PS:我已经头疼了,因为没找到问题

最佳答案

lotes 表的 CREATE 语句中存在矛盾

CREATE TABLE lotes(
cve_lote VARCHAR(255) NOT NULL,
fecha_alta DATETIME DEFAULT CURRENT_TIMESTAMP,
fecha_caducidad DATE,
cve_medicamento VARCHAR(255) NOT NULL,
PRIMARY KEY(cve_lote),
FOREIGN KEY(cve_medicamento) REFERENCES medicamentos(cve_medicamento) ON DELETE SET NULL ON UPDATE CASCADE
) ENGINE=INNODB;

问题出在这里:

cve_medicamento  VARCHAR(255) NOT NULL

这里:

FOREIGN KEY(cve_medicamento) ... ON DELETE SET NULL

在第一行中,您已明确声明 cve_medicamento 不应该为 NULL。在第二行中,您明确指出当删除外键引用时,cve_medicamento 设置为 NULL

通过消除 NOT NULL 并将该行更改为

,我能够获得成功创建 lotes 表的查询
cve_medicamento  VARCHAR(255)

MySQL documentation... 中了解更多信息.

If you specify a SET NULL action, make sure that you have not declared the columns in the child table as NOT NULL.

关于mysql - 错误 #1215 - 无法在 DELETE SET NULL 上添加外键约束,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53490571/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com