我已经尝试了几个小时来添加这个具有引用完整性的查询,但是它表明有错误,但是如果我删除它们,查询运行得很好。我只把它们放在餐桌上。
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不能添加外键约束一手也不会是个坏主意,谢谢。我已经头痛了,因为我没有发现问题
1条答案
按热度按时间flvlnr441#
你的观点自相矛盾
CREATE
对lotes
table。问题在于:
在这里:
在第一行,你已经明确指出
cve_medicamento
不应该NULL
. 在第二行,你已经明确指出cve_medicamento
应设置为NULL
当其外键引用被删除时。我能够让查询成功地创建一个
lotes
通过消除NOT NULL
把线路改成阅读mysql文档中的更多内容。。。。
如果您指定
SET NULL
操作时,请确保未将子表中的列声明为NOT NULL
.