Не съм напълно сигурен какво имате предвид под „неправилно въвеждане на ID“, но предполагам, че имате предвид ID, който не е валиден, а не просто грешка (като да кажете, че някой е в град, различен от този, в който наистина са).
Ограничението за външен ключ означава, че стойността, която въвеждат в person таблица за city_id има да съществува като първичен ключ в city маса. Те не могат да поставят стара стойност като city_id , само валидни стойности. И съответния city след това ред не може да бъде изтрит без премахване/промяна на препратката в person таблица (напр. актуализиране до различна валидна стойност) или - малко вероятно в този случай - каскадно изтриване, така че всяко person записи за city се изтриват.
Да кажем, че създавате своите таблици като:
create table city (id number primary key, code varchar2(2), name varchar2(30));
create table person (id number, name varchar2(30), last_name varchar2(30),
city_id number not null references city(id));
Имате три записа във вашия city таблица:
insert into city (id, name) values (1, 'New York');
insert into city (id, name) values (2, 'London');
insert into city (id, name) values (3, 'Paris');
След това можете да добавите person който живее в Ню Йорк, като включи идентификационния номер на този град:
insert into person (id, name, last_name, city_id)
values (1, 'Michael', 'Bloomberg', 1);
(SQL Fiddle )
Не денормализирате данните в съответстващия city запис, така че ако Ню Йорк реши да промени името си обратно на Нов Амстердам, да речем, това ще бъде единична актуализация на city запишете и няма да се налага да докосвате person записи за хора в този град.
Ако се опитате да изтриете city запис за Ню Йорк, ще получите грешка (ORA-02292), която казва, че съществува дъщерен запис. Можете да актуализирате person запис, за да има city_id от 2 или 3 и след това ще можете да изтриете Ню Йорк. Идеята е, че не можете да направите това случайно и да оставите осиротели данни - person_id сочещи към city който вече не съществува.
Ако сте опитали да създадете person запис с city_id стойност, която не съответства на city.id стойност:
insert into person (id, name, last_name, city_id)
values (2, 'Elvis', 'Presley', 4);
... тогава ще получите грешка (ORA-02291), че родителският ключ - тоест съответстващ id стойност в city таблици - не съществува.
Можете да прочетете повече за външните ключове в концепциите за бази данни ръководство .