Oracle
 sql >> Teknologi Basis Data >  >> RDS >> Oracle

cara memasukkan kunci asing ke dalam tabel

Saya tidak sepenuhnya yakin apa yang Anda maksud dengan 'input ID yang salah', tetapi saya akan menganggap yang Anda maksud adalah ID yang tidak valid, bukan hanya kesalahan (seperti mengatakan seseorang berada di kota yang berbeda dengan tempat mereka sebenarnya adalah).

Batasan kunci asing berarti bahwa nilai yang dimasukkan dalam person tabel untuk city_id memiliki ada sebagai kunci utama di city meja. Mereka tidak dapat memasukkan nilai lama sebagai city_id , hanya nilai yang valid. Dan city yang sesuai baris tidak dapat dihapus tanpa menghapus/mengubah referensi di person tabel (mis. memperbarui ke nilai valid yang berbeda), atau - tidak mungkin dalam kasus ini - mengalirkan penghapusan sehingga person mana pun catatan untuk city dihapus.

Jadi katakanlah Anda membuat tabel sebagai:

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

Anda memiliki tiga catatan di city . Anda tabel:

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

Kemudian Anda dapat menambahkan person yang tinggal di New York dengan mencantumkan ID kota tersebut:

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

(SQL Fiddle )

Anda tidak mendenormalisasi data di city yang cocok catatan, jadi jika New York memutuskan untuk mengubah namanya kembali menjadi New Amsterdam, katakanlah, itu akan menjadi pembaruan tunggal untuk city rekam dan Anda tidak perlu menyentuh person any catatan untuk orang-orang di kota itu.

Jika Anda mencoba menghapus city record untuk New York, Anda akan mendapatkan kesalahan (ORA-02292) yang mengatakan bahwa ada catatan anak. Anda dapat memperbarui person catatan memiliki city_id dari 2 atau 3, dan kemudian dapat menghapus New York. Idenya adalah Anda tidak dapat melakukan ini secara tidak sengaja dan meninggalkan data yatim - person_id menunjuk ke city yang sudah tidak ada lagi.

Jika Anda mencoba membuat person rekam dengan city_id nilai yang tidak cocok dengan city.id nilai:

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

... maka Anda akan mendapatkan kesalahan (ORA-02291) bahwa kunci induk - yaitu, id yang cocok nilai di city tabel - tidak ada.

Anda dapat membaca lebih lanjut tentang kunci asing di konsep database panduan .



  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:Cara untuk menggabungkan kolom yang tidak dikelompokkan dalam hasil yang dikelompokkan

  2. Bagaimana cara terbaik mengelola nilai pencarian historis dalam database?

  3. Menggunakan komponen sadar data Delphi - pro dan kontra

  4. Beberapa fungsi REPLACE di Oracle

  5. Apa yang menyebabkan kesalahan tanda kurung kanan yang hilang dalam SQL?