MySQL workbench не работает с определенным скриптом, который работает на других компьютерах

#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 .