#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 буклинга может быть только один клиент.