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

Cách tạo bảng với khóa ngoại trong SQL

Vấn đề:

Bạn muốn tạo khóa ngoại cho một bảng trong cơ sở dữ liệu.

Ví dụ:

Chúng tôi muốn tạo một bảng có tên student chứa khóa ngoại tham chiếu đến id trong bảng city .

Giải pháp 1 (bảng mới):

CREATE TABLE student (
id INT PRIMARY KEY,
first_name VARCHAR(100) NOT NULL,
last_name VARCHAR(100) NOT NULL,
city_id INT FOREIGN KEY REFERENCES city(id)
);

Thảo luận:

Để tạo một bảng mới có chứa một cột khóa ngoại tham chiếu đến một bảng khác, hãy sử dụng từ khóa FOREIGN KEY REFERENCES ở cuối định nghĩa của cột đó. Theo đó với tên của bảng được tham chiếu và tên của cột được tham chiếu trong ngoặc đơn.

Trong ví dụ của chúng tôi, chúng tôi tạo bảng student sử dụng CREATE TABLE mệnh đề. Chúng tôi liệt kê tên của các cột và đặt các kiểu dữ liệu tương ứng của chúng trong dấu ngoặc đơn. Cột city_id là khóa ngoại trong bảng này và cho biết giá trị của ID được lưu trữ trong cột id trong bảng city . Chúng tôi viết FOREIGN KEY REFERENCES ở cuối định nghĩa của cột này và theo sau nó với bảng và cột được tham chiếu:city(id) .

Hãy nhớ rằng bạn có thể tạo nhiều khóa ngoại cho một bảng.

Giải pháp 2 (bảng mới):

CREATE TABLE student (
id INT PRIMARY KEY,
first_name VARCHAR(100) NOT NULL,
last_name VARCHAR(100) NOT NULL,
city_id INT,
FOREIGN KEY (city_id) REFERENCES city(id)
);

Thảo luận:

Một cách khác để xác định khóa ngoại trong quá trình tạo bảng là sử dụng FOREIGN KEY REFERENCES mệnh đề ở cuối các định nghĩa cột. Trong trường hợp này, sau FOREIGN KEY , chúng tôi chỉ định cột khóa ngoại. Tiếp theo là REFERENCES cùng với tên của bảng và cột được tham chiếu.

Bạn có thể tạo khóa ngoại trên nhiều cột, như được hiển thị bên dưới:

Giải pháp 3 (bảng mới):

CREATE TABLE student (
id INT PRIMARY KEY,
first_name VARCHAR(100) NOT NULL,
last_name VARCHAR(100) NOT NULL,
score_id INT,
subject_id INT,
      CONSTRAINT fk_student_score_subject_id 
      FOREIGN KEY (subject_id, score_id) REFERENCES score_subject(subject_id, score_id)
);

Trong ví dụ này, ràng buộc fk_student_score_subject_id là một khóa ngoại bao gồm hai cột:score_idsubject_id . Hai cột khóa ngoại này tham chiếu đến hai cột trong bảng score_subject - score_idsubject_id .

Đây là một ví dụ khác:

Giải pháp 4 (bảng mới):

CREATE TABLE student (
id INT PRIMARY KEY,
first_name VARCHAR(100) NOT NULL,
last_name VARCHAR(100) NOT NULL,
city_id INT,
      CONSTRAINT fk_student_city_id 
      FOREIGN KEY (city_id) REFERENCES city(id)
);

Thảo luận:

Trong mã này, chúng ta lại có CONSTRAINT mệnh đề với tên của ràng buộc này. Sử dụng tên dễ đọc và dễ hiểu. Trong ví dụ của chúng tôi, chúng tôi sử dụng tên fk_student_city_id , chỉ ra bảng và cột có liên quan. Tiếp theo, chúng tôi viết FOREIGN KEY và thêm (trong ngoặc đơn) tên của cột trở thành khóa ngoại. Sau đó, chúng tôi có REFERENCES theo sau là tên của bảng và cột được tham chiếu (tại đây:id ).

Giải pháp 5 (bảng hiện có):

ALTER TABLE student
ADD FOREIGN KEY (city_id) REFERENCES city(id);

Thảo luận:

Cũng có thể thêm khóa ngoại mới vào bảng hiện có. Ở đây, bảng được thay đổi bằng cách sử dụng ALTER TABLE mệnh đề. Tên bảng (trong ví dụ của chúng tôi, student ) được đặt sau ALTER TABLE từ khóa. Tiếp theo, ADD FOREIGN KEY theo sau mệnh đề là tên của cột sẽ được sử dụng làm khóa ngoại. Sau đó, chúng ta có mệnh đề REFERENCES clause với tên của bảng được tham chiếu và tên của cột khóa chính trong ngoặc đơn.

Lưu ý rằng bảng bạn đang sửa đổi phải tồn tại trước khi lệnh này được thực thi.

Giải pháp 6 (bảng hiện có, ràng buộc khóa ngoại):

ALTER TABLE student
      ADD CONSTRAINT fk_student_city_id 
      FOREIGN KEY (city_id) REFERENCES city(id)

Thảo luận:

Sử dụng một truy vấn như thế này nếu bạn muốn đặt tên cho một cột khóa ngoại làm ràng buộc cho một bảng hiện có. Ở đây, ràng buộc khóa ngoại được đặt tên là fk_student_city_id . Nếu bạn không chỉ định tên ràng buộc, cơ sở dữ liệu sẽ tạo một tên ràng buộc mặc định (tên này sẽ thay đổi theo cơ sở dữ liệu).


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Việc cần làm (hoặc không nên làm) đối với số liệu thống kê về thời gian chờ hàng đầu

  2. SQL ngoại trừ

  3. Thủ tục lưu trữ để lấy thông tin lưu trữ máy chủ trong máy chủ

  4. Mô hình cơ sở dữ liệu cơ sở trong thực tế:Thử thách của Blogger

  5. Mức lương cao thứ n