Oracle
 sql >> база данни >  >> RDS >> Oracle

как да вмъкнете външен ключ в таблица

Не съм напълно сигурен какво имате предвид под „неправилно въвеждане на 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 таблици - не съществува.

Можете да прочетете повече за външните ключове в концепциите за бази данни ръководство .



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Групиране по срещу разделяне по в Oracle

  2. Oracle задейства това ограничение за проверка на месечна база

  3. Инструкция UPDATE в Oracle с помощта на SQL или PL/SQL за актуализиране САМО на първия дублиран ред

  4. Обновете материализиран изглед на Oracle в Spring Data Repository

  5. Какво потребителско име и парола трябва да бъдат въведени при свързване към SQL*Plus след инсталиране на Oracle 11g?