Oracle
 sql >> Datenbank >  >> RDS >> Oracle

wie man Fremdschlüssel in eine Tabelle einfügt

Ich bin mir nicht ganz sicher, was Sie mit "falscher ID-Eingabe" meinen, aber ich nehme an, Sie meinen eine ID, die nicht gültig ist, und nicht nur einen Fehler (wie zu sagen, dass sich jemand in einer anderen Stadt befindet als in Wirklichkeit sind).

Die Fremdschlüsselbeschränkung bedeutet, dass der Wert, den sie in person eingeben Tabelle für city_id hat als Primärschlüssel in city existieren Tisch. Sie können keinen alten Wert als city_id einfügen , nur gültige Werte. Und die dazugehörige city Zeile kann dann nicht gelöscht werden, ohne entweder den Verweis in person zu entfernen/zu ändern Tabelle (z. B. Aktualisieren auf einen anderen gültigen Wert) oder - in diesem Fall unwahrscheinlich - Kaskadieren des Löschvorgangs, sodass jeder person Aufzeichnungen für die city werden gelöscht.

Nehmen wir also an, Sie erstellen Ihre Tabellen wie folgt:

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));

Du hast drei Rekorde in deiner city Tabelle:

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');

Dann können Sie eine person hinzufügen der in New York lebt, indem Sie die ID dieser Stadt angeben:

insert into person (id, name, last_name, city_id)
values (1, 'Michael', 'Bloomberg', 1);

(SQL-Fiddle )

Sie denormalisieren die Daten in der übereinstimmenden city nicht Wenn also New York beschließt, seinen Namen wieder in New Amsterdam zu ändern, wäre das eine einzige Aktualisierung der city aufnehmen und Sie müssten keine person berühren Rekorde für Menschen in dieser Stadt.

Wenn Sie versucht haben, die city zu löschen Datensatz für New York erhalten Sie eine Fehlermeldung (ORA-02292), die besagt, dass ein untergeordneter Datensatz existiert. Sie könnten die person aktualisieren Datensatz eine city_id haben von 2 oder 3, und wäre dann in der Lage, New York zu löschen. Die Idee ist, dass Sie dies nicht aus Versehen tun und verwaiste Daten zurücklassen können – eine person_id zeigt auf eine city die nicht mehr existiert.

Wenn Sie versucht haben, eine person zu erstellen Eintrag mit einer city_id Wert, der nicht mit einer city.id übereinstimmt Wert:

insert into person (id, name, last_name, city_id)
values (2, 'Elvis', 'Presley', 4);

... dann erhalten Sie eine Fehlermeldung (ORA-02291), dass der übergeordnete Schlüssel - also eine passende id Wert in der city Tabellen - existiert nicht.

Weitere Informationen zu Fremdschlüsseln finden Sie in den Datenbankkonzepten Anleitung .