невозможно вставить первичный ключ в таблицу mysql

#mysql #xampp #foreign-keys #primary-key

#mysql #xampp ( ксампп ) #внешние ключи #первичный ключ #xampp

Вопрос:

Я полный новичок в sql, и я использую mysql xampp server, где у меня есть таблица customers и таблица bookings . Я использую mysql data modeler с ddl для генерации кода , который создает эти таблицы . Вот как создаются мои 2 таблицы ниже:

ТАБЛИЦА БРОНИРОВАНИЯ:

 CREATE TABLE booking (
    booking_id             INTEGER NOT NULL,
    b_city                 VARCHAR(30),
    b_date                 DATETIME,
    departure_date         DATETIME,
    arrival_date           DATETIME,
    dep_time               DATETIME,
    arr_time               DATETIME,
    seat_type              VARCHAR(30),
    flight_cost            DOUBLE,
    total_cost             DOUBLE,
    booking_state          VARCHAR(2),
    deposit                DOUBLE,
    price_remenant         DOUBLE,
    customer_customer_id   VARCHAR(20) NOT NULL,
    flight_id              INTEGER,
    customer_customer_id1  VARCHAR(20) NOT NULL //I don't know why this is created again 
);

CREATE UNIQUE INDEX booking__idx ON
    booking (
        customer_customer_id
    ASC );

ALTER TABLE booking ADD CONSTRAINT booking_pk PRIMARY KEY ( booking_id );
ALTER TABLE booking
    ADD CONSTRAINT booking_customer_fk FOREIGN KEY ( customer_customer_id )
        REFERENCES customer ( customer_id );

ALTER TABLE booking
    ADD CONSTRAINT booking_customer_fkv2 FOREIGN KEY ( customer_customer_id1 )
        REFERENCES customer ( customer_id );
  

ТАБЛИЦА КЛИЕНТОВ :

 CREATE TABLE customer (
    customer_id         VARCHAR(20) NOT NULL,
    first_name          VARCHAR(20),
    last_name           VARCHAR(30),
    booking_booking_id  INTEGER NOT NULL
);

CREATE UNIQUE INDEX customer__idx ON
    customer (
        booking_booking_id
    ASC );

ALTER TABLE customer ADD CONSTRAINT customer_pk PRIMARY KEY ( customer_id );

ALTER TABLE customer
    ADD CONSTRAINT customer_booking_fk FOREIGN KEY ( booking_booking_id )
        REFERENCES booking ( booking_id );
  

Теперь всякий раз, когда я пытаюсь вставить клиента на сервер mysql xampp с помощью ввода

 INSERT INTO customer('customer_id')VALUE("1234"); 
  

Я получаю ошибку # 1452 — Не удается добавить или обновить дочернюю строку: сбой ограничения внешнего ключа ( airline_db . customer , ССЫЛКИ НА customer_booking_fk ССЫЛКИ НА ВНЕШНИЙ КЛЮЧ ( booking_booking_id ) booking ( booking_id )), которые я понятия не имею, почему, поскольку customer_id это первичный ключ, а Booking.customer_id внешний ключ, и я не знаю, почему booking_id включен в эту ошибку
Так же выглядят мои объекты в data modeler :

введите описание изображения здесь

Я был бы очень признателен за вашу помощь.

Ответ №1:

вы не можете вставить такие файлы

 CREATE TABLE customer (
    customer_id         VARCHAR(20) NOT NULL,
    first_name          VARCHAR(20),
    last_name           VARCHAR(30),
    booking_booking_id  INTEGER NOT NULL
);
  

Означает, что вам нужно, по крайней мере, ввести 1 booking_id, который не может быть нулевым, но поскольку у вас нет значений по умолчанию для него

Также внешний ключ означает, что вы должны сохранить такой идентификатор в booking, прежде чем добавлять строку в customers

Наконец, у вас есть еще одна проблема, поскольку вы можете добавить бронирование только при наличии customer_id и наоборот, поэтому избавьтесь от ограничения в customer

Комментарии:

1. Вы имеете в виду, что я должен избавиться от внешнего ключа booking_id в клиенте? Какое ограничение?

2. да, потому что у 1 клиента может быть много заказов, но у 1 буклинга может быть только один клиент.