Oracle
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Oracle

cách chèn khóa ngoại vào bảng

Tôi không hoàn toàn chắc chắn ý bạn là 'nhập sai ID', nhưng tôi sẽ cho rằng bạn muốn nói đến một ID không hợp lệ, thay vì chỉ do nhầm lẫn (chẳng hạn như nói rằng ai đó đang ở một thành phố khác với nơi họ thực sự đang).

Ràng buộc khóa ngoại có nghĩa là giá trị họ nhập vào person bảng cho city_id tồn tại dưới dạng khóa chính ở city bàn. Họ không thể đặt bất kỳ giá trị cũ nào dưới dạng city_id , chỉ các giá trị hợp lệ. Và city tương ứng sau đó không thể xóa hàng mà không xóa / thay đổi tham chiếu trong person bảng (ví dụ:cập nhật lên một giá trị hợp lệ khác) hoặc - không thể xảy ra trong trường hợp này - xếp tầng xóa để bất kỳ person nào hồ sơ cho city bị xóa.

Vì vậy, giả sử bạn tạo các bảng của mình dưới dạng:

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

Bạn có ba bản ghi ở city của mình bảng:

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

Sau đó, bạn có thể thêm person người sống ở New York bằng cách bao gồm ID của thành phố đó:

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

( SQL Fiddle )

Bạn không chuẩn hóa dữ liệu ở city phù hợp ghi lại, vì vậy nếu New York quyết định đổi tên trở lại New Amsterdam, chẳng hạn, đó sẽ là một bản cập nhật duy nhất cho city ghi lại và bạn sẽ không phải chạm vào person nào hồ sơ cho những người ở thành phố đó.

Nếu bạn đã cố xóa city bản ghi cho New York, bạn sẽ gặp lỗi (ORA-02292) cho biết rằng bản ghi con đã tồn tại. Bạn có thể cập nhật person ghi lại để có city_id 2 hoặc 3, và sau đó có thể xóa New York. Ý tưởng là bạn không thể thực hiện điều này một cách tình cờ và để lại dữ liệu mồ côi - một person_id trỏ đến city không còn tồn tại.

Nếu bạn đã cố gắng tạo person ghi bằng city_id giá trị không khớp với city.id giá trị:

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

... thì bạn sẽ gặp lỗi (ORA-02291) là khóa mẹ - tức là id khớp giá trị ở city bảng - không tồn tại.

Bạn có thể đọc thêm về khóa ngoại trong khái niệm cơ sở dữ liệu hướng dẫn .



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Lighty cho Oracle

  2. Chia chuỗi thành hàng Oracle SQL

  3. Cách lưu trữ kết quả lựa chọn thành biến trong thủ tục Oracle

  4. ORA-04091:bảng xx_xx đang đột biến, trình kích hoạt / chức năng có thể không nhìn thấy nó

  5. Java:Đọc Blob từ Oracle