Код ниже будет работать.
Это имеет три изменения вместо использования FOREIGN KEY (CustID) REFERENCES customer (CustID)
, что требует определения столбца CustID в таблице serviceticket ; CustID REFERENCES customer (CustID)
, это определяет столбец CustID и устанавливает ограничение внешнего ключа.
Второе изменение заменяет 098636 , что приведет к конфликту ограничений внешнего ключа, с 170362 , которое является значением, которое существует в столбце CustID Заказчик Таблица.
например. : -
Это работает (после того, как таблица была правильно определена): -
insert into serviceticket (TicketID, WatchID, CustID, DateRecieved, DateReturned, ExpectedDelivery, COMMENTS, DateReturned)
values (6745, 87463, '170362', 124319, 362836, 683743, 'Nothing to say', 583728)
> Affected rows: 1
> Time: 0.082s
Это (согласно сообщению) завершится ошибкой
insert into serviceticket (TicketID, WatchID, CustID, DateRecieved, DateReturned, ExpectedDelivery, COMMENTS, DateReturned)
values (6745, 87463, 098636, 124319, 362836, 683743, 'Nothing to say', 583728)
> FOREIGN KEY constraint failed
> Time: 0s
Третье изменение меняет порядок, в котором отбрасываются таблицы.
Рабочий код
drop table if exists serviceticket; -- <<<<<<<<<< if not coding ON DELETE CASCADE the children have to be deleted first (so moved before dropping customer table)
drop table if exists customer;
PRAGMA foreign_keys = ON;
create table customer (CustID char(6) not null primary key UNIQUE,
CustNAME TEXT,
STREET TEXT,
CITY TEXT,
ZIP INT(5),
EMAIL VARCHAR,
PHONENUMBER INT(10)
);
create table serviceticket (TicketID char(4) not null primary key,
TicketNO char(5),
WatchID char(6),
DateRecieved char(6),
ExpectedDelivery char(6),
COMMENTS text,
DateReturned char(6),
CustID REFERENCES customer (CustID) -- <<<<<<<<<< defines the column and foreign key
);
insert into customer (CustID, CustNAME, STREET, CITY, ZIP, PHONENUMBER, EMAIL)
values (170362, 'James', 'Vvegen', 'New York', 12345, 8170710520, 'brt92@outlook.com');
insert into serviceticket (TicketID, WatchID, CustID, DateRecieved, DateReturned, ExpectedDelivery, COMMENTS, DateReturned)
values (6745, 87463,
'170362', -- <<<<<<<<<< MUST match a value in CustID column of the customer table (changed to work)
124319, 362836, 683743, 'Nothing to say', 583728);
Дополнительно
Вы можете рассмотреть возможность использования (или его вариантов): -
CustID REFERENCES customer (CustID) ON DELETE CASCADE ON UPDATE CASCADE
4,3. ON DELETE и ON UPDATE Действия