「間違った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に3つのレコードがあります 表:
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を追加できます その都市のIDを含めることでニューヨークに住んでいる人:
insert into person (id, name, last_name, city_id)
values (1, 'Michael', 'Bloomberg', 1);
(SQLフィドル )
一致するcityのデータを非正規化していない たとえば、ニューヨークが名前をニューアムステルダムに戻すことにした場合、それはcityへの1回の更新になります。 記録すれば、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);
...次に、親キー(つまり、一致するid)というエラー(ORA-02291)が発生します。 cityの値 テーブル-存在しません。
外部キーの詳細については、データベースの概念を参照してください。ガイド 。