#mysql #sql
#mysql #sql
Вопрос:
У меня (не очень) небольшая проблема. У меня есть этот SQL-файл, который отлично работает на всех компьютерах, кроме моего. И поскольку он не работает в моем, кодирование в моем конце довольно сложно. Это выдает мне ошибку 1822 без реального объяснения, поскольку я не могу воспроизвести ее в других системах. Есть какие-либо подсказки о том, что может происходить?
use marioTallerizo;
CREATE TABLE IF NOT EXISTS concesionarios (
id_concesionario INT(9) NOT NULL,
nombre VARCHAR(20) NOT NULL,
direccion VARCHAR(50),
telefono VARCHAR(15),
codigo_postal INT(5),
PRIMARY KEY (id_concesionario)
);
CREATE TABLE IF NOT EXISTS usuarios (
id_concesionario INT(9) NOT NULL,
id_usuario INT(9) NOT NULL,
dni VARCHAR(20) NOT NULL,
usuario VARCHAR(25) NOT NULL,
contrasena VARCHAR(30) NOT NULL,
nombre VARCHAR(20) NOT NULL,
apellido VARCHAR(50),
direccion VARCHAR(50),
telefono VARCHAR(15),
codigo_postal INT(5),
rol VARCHAR(20),
PRIMARY KEY (id_usuario , dni),
FOREIGN KEY (id_concesionario)
REFERENCES concesionarios (id_concesionario)
);
CREATE TABLE IF NOT EXISTS jefe (
id_usuario INT(9) NOT NULL,
FOREIGN KEY (id_usuario)
REFERENCES usuarios (id_usuario)
);
CREATE TABLE IF NOT EXISTS vehiculos (
id_vehiculo INT(9) NOT NULL,
id_concesionario INT(9) NOT NULL,
numero_bastidor VARCHAR(20) NOT NULL,
especialidad ENUM('coche', 'motocicleta', 'ciclomotor'),
precio INT(50),
PRIMARY KEY (id_vehiculo , numero_bastidor),
FOREIGN KEY (id_concesionario)
REFERENCES concesionarios (id_concesionario)
);
CREATE TABLE IF NOT EXISTS clientes (
id_vehiculo INT(9) NOT NULL,
id_cliente INT(9) NOT NULL,
dni VARCHAR(20) NOT NULL,
nombre VARCHAR(20) NOT NULL,
apellido VARCHAR(50),
direccion VARCHAR(50),
telefono VARCHAR(15),
codigo_postal INT(5),
PRIMARY KEY (id_cliente),
FOREIGN KEY (id_vehiculo)
REFERENCES vehiculos (id_vehiculo)
);
create table if not exists ventas (
id_usuario int(9) NOT NULL,
id_venta int(9) NOT NULL,
id_cliente int(9) NOT NULL,
PRIMARY KEY (id_venta),
FOREIGN KEY (id_usuario) REFERENCES usuarios(id_usuario),
FOREIGN KEY (id_cliente) REFERENCES clientes(id_cliente)
);
CREATE TABLE IF NOT EXISTS mecanicos (
id_usuario INT(9) NOT NULL,
id_vehiculo INT(9) NOT NULL,
especialidad ENUM('Coche', 'Moto', 'Camion'),
es_jefe BIT,
FOREIGN KEY (id_usuario)
REFERENCES usuarios (id_usuario),
FOREIGN KEY (id_vehiculo)
REFERENCES vehiculos (id_vehiculo)
);
CREATE TABLE IF NOT EXISTS coches (
id_vehiculo INT(9) NOT NULL,
precio INT(6),
PRIMARY KEY (id_vehiculo),
FOREIGN KEY (id_vehiculo)
REFERENCES vehiculos (id_vehiculo)
);
CREATE TABLE IF NOT EXISTS motocicletas (
id_vehiculo INT(9) NOT NULL,
precio INT(6),
FOREIGN KEY (id_vehiculo)
REFERENCES vehiculos (id_vehiculo)
);
CREATE TABLE IF NOT EXISTS ciclomotor (
id_vehiculo INT(9) NOT NULL,
precio INT(6),
FOREIGN KEY (id_vehiculo)
REFERENCES vehiculos (id_vehiculo)
);
CREATE TABLE IF NOT EXISTS reparaciones (
id_reparacion INT(9) NOT NULL,
id_vehiculo INT(9) NOT NULL,
id_mecanico INT(9) NOT NULL,
fecha_entrada DATE,
fecha_salida DATE,
presupuesto INT,
piezas ENUM('tornillos', 'tuercas'),
PRIMARY KEY (id_reparacion),
FOREIGN KEY (id_vehiculo)
REFERENCES vehiculos (id_vehiculo),
FOREIGN KEY (id_mecanico)
REFERENCES mecanicos (id_usuario)
);
CREATE TABLE IF NOT EXISTS propuestas (
id_propuesta INT(9) NOT NULL,
id_ventas INT(9) NOT NULL,
id_cliente INT(9) NOT NULL,
precio INT(50),
vendido BIT,
PRIMARY KEY (id_propuesta),
FOREIGN KEY (id_ventas)
REFERENCES ventas (id_venta),
FOREIGN KEY (id_cliente)
REFERENCES clientes (id_cliente)
);
insert into concesionarios values (1, 'Peugeot', 'Avenida Velázquez', '952759027', '29005');
insert into usuarios values (1, 1, '74637189H' , 'carlosfm', 'hola', 'Carlos', 'Fernández', 'Calle Mármoles', '684727185', '29002', 'Mecánico');
insert into usuarios values (1, 1, '74637189T' , 'proxo', 'hola', 'Carlos', 'Fernández', 'Calle Mármoles', '684727185', '29002', 'Ventas');
insert into jefe values (1);
insert into vehiculos values (1, 1, 'VSSZZZ1MZ2R040807', 'coche', '20000');
insert into vehiculos values (2, 1,'VSSZZZ1MZ2R040807', 'motocicleta', '20000');
insert into vehiculos values (3, 1, 'VSSZZZ1MZ2R040807', 'ciclomotor', '20000');
-- PROBLEMA. NO PUEDE HABER UN CLIENTE CON EL MISMO DNI QUE UN JEFE O UN MEC�NICO
insert into clientes values (1, 1, '74829187B', 'Manuel', 'Jurado', 'Calle Mármoles', '638192847', '29001');
insert into ventas values (1, 1, 1);
insert into mecanicos values (1, 1, 'Coche', 0);
insert into coches values (1, '15000');
-- PROBLEMA. SE PUEDE INSERTAR UN MISMO NUMERO DE BASTIDOR EN LA TABLA COCHE, MOTOCICLETA Y CICLOMOTOR Y NO DEBER�A
insert into motocicletas values (2, '2000');
insert into ciclomotor values (3, '1000');
insert into reparaciones values (1, 2, 1, '2020-10-20', '2020-10-28', '200', 'tornillos');
insert into propuestas values (1, 1, 1, '23000', 0);
Ошибка гласит:
Error Code: 1822. Failed to add the foreign key constraint. Missing index for constraint 'propuestas_ibfk_1' in the referenced table 'ventas'
Он должен создавать таблицу без проблем, но не может создать таблицу «propuestas» из-за этой ошибки.
Комментарии:
1. Проверьте таблицу ventas после создания, возможно, что-то пошло не так с первичным ключом.
2. Я запустил ваш скрипт в моем локальном mysql workbench, и он завершился без каких-либо проблем, возможно, необходимо удалить некоторые индексы: индекс MySQL .