Oracle
 sql >> Baza danych >  >> RDS >> Oracle

jak wstawić klucz obcy do tabeli

Nie jestem do końca pewien, co rozumiesz przez „nieprawidłowy identyfikator”, ale zakładam, że masz na myśli nieprawidłowy identyfikator, a nie tylko pomyłkę (jak powiedzenie, że ktoś jest w innym mieście niż to, w którym naprawdę są).

Ograniczenie klucza obcego oznacza, że ​​wartość, którą wprowadzają w person tabela dla city_id ma istnieć jako klucz podstawowy w city stół. Nie mogą umieścić żadnej starej wartości jako city_id , tylko prawidłowe wartości. I odpowiadające mu city wiersz nie może zostać usunięty bez usunięcia/zmiany odniesienia w person tabela (np. aktualizacja do innej prawidłowej wartości) lub - w tym przypadku mało prawdopodobne - kaskadowe usuwanie, tak aby każda person rekordy dla city zostaną usunięte.

Powiedzmy, że tworzysz swoje tabele jako:

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

Masz trzy rekordy w swoim city tabela:

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

Następnie możesz dodać person mieszka w Nowym Jorku, podając identyfikator tego miasta:

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

(Skrzypce SQL )

Nie denormalizujesz danych w pasującym city rekord, więc gdyby Nowy Jork zdecydował się zmienić nazwę z powrotem na Nowy Amsterdam, powiedzmy, byłaby to pojedyncza aktualizacja city nagrywaj i nie musisz dotykać żadnej person rekordy dla osób w tym mieście.

Jeśli próbowałeś usunąć city rekord dla Nowego Jorku, otrzymasz błąd (ORA-02292) mówiący, że istnieje rekord podrzędny. Możesz zaktualizować person rekord, aby mieć city_id 2 lub 3, a następnie będzie w stanie usunąć Nowy Jork. Chodzi o to, że nie możesz tego zrobić przez przypadek i zostawić osierocone dane - person_id wskazując na city które już nie istnieje.

Jeśli próbowałeś utworzyć person rekord z city_id wartość, która nie pasuje do city.id wartość:

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

... wtedy otrzymasz błąd (ORA-02291), że klucz nadrzędny - czyli pasujący id wartość w city tabele - nie istnieje.

Więcej informacji o kluczach obcych można znaleźć w pojęciach dotyczących baz danych przewodnik .



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Upewnij się, że sesja php otrzymuje tę samą sesję oracle podczas korzystania z oci_pconnect

  2. Oracle sql lub pl/sql:Obliczanie na podstawie wartości poprzedniego wiersza i kolumny daty

  3. Oracle PLSQL ustawia kursor ze zmiennej

  4. jak wywołać funkcję w funkcji plsql

  5. Oracle APEX — Eksportuj zapytanie do CSV za pomocą przycisku