2010-06-22 43 views
7

tôi nhận được câu trả lời cho một câu hỏi khác ở đây:Sử dụng tài liệu tham khảo trong MYSQL

DB Schema For Chats?

Đó là một câu trả lời tuyệt vời, nhưng tôi không hiểu được chút thông tin về tài liệu tham khảo. Tôi có thể làm các câu lệnh SQL nhưng tôi chưa bao giờ sử dụng các tham chiếu.

  1. Chúng được sử dụng để làm gì?
  2. Chúng được sử dụng như thế nào?
  3. Hãy cho một ví dụ xin

Trả lời

12

Từ khóa Tài liệu tham khảo là một phần của một foreign key constraint và nó gây ra MySQL để yêu cầu rằng giá trị (s) trong cột cụ thể (s) của bảng tham khảo cũng có mặt trong các quy định (các) cột của bảng được tham chiếu.

Điều này ngăn các khóa ngoại không tham chiếu đến các id không tồn tại hoặc đã bị xóa và có thể ngăn cản bạn xóa các hàng trong khi chúng vẫn được tham chiếu.

Ví dụ cụ thể là nếu mỗi nhân viên phải thuộc về một bộ phận thì bạn có thể thêm ràng buộc khóa ngoài từ employee.departmentid tham chiếu department.id.

Chạy đoạn mã sau để tạo ra hai bảng kiểm tra tableatableb nơi cột a_id trong tài liệu tham khảo tableb khóa chính của tablea. tablea được điền bằng một vài hàng.

CREATE TABLE tablea (
    id INT PRIMARY KEY, 
    foo VARCHAR(100) NOT NULL 
) Engine = InnoDB; 

INSERT INTO tablea (id, foo) VALUES 
(1, 'foo1'), 
(2, 'foo2'), 
(3, 'foo3'); 

CREATE TABLE tableb (
    id INT PRIMARY KEY, 
    a_id INT NOT NULL, 
    bar VARCHAR(100) NOT NULL, 
    FOREIGN KEY fk_b_a_id (a_id) REFERENCES tablea (id) 
) Engine = InnoDB; 

Bây giờ hãy thử các lệnh này:

INSERT INTO tableb (id, a_id, bar) VALUES (1, 2, 'bar1'); 
-- succeeds because there is a row in tablea with id 2 

INSERT INTO tableb (id, a_id, bar) VALUES (2, 4, 'bar2'); 
-- fails because there is not a row in tablea with id 4 

DELETE FROM tablea WHERE id = 1; 
-- succeeds because there is no row in tableb which references this row 

DELETE FROM tablea WHERE id = 2; 
-- fails because there is a row in tableb which references this row 

Lưu ý quan trọng: Cả hai bảng phải được bảng InnoDB hoặc hạn chế được bỏ qua.

+0

Khi bạn sử dụng TÀI LIỆU THAM KHẢO, tôi nghĩ rằng nó cũng hy vọng rằng bảng phải tồn tại trên mặt của mối quan hệ. – Donato

2

Từ khóa REFERENCES cho thấy một ràng buộc khoá ngoại, có nghĩa là:

FOREIGN KEY (`chat_id`) REFERENCES `chats`.`chat` (`id`) 

... các chat_id cột trong bảng hiện tại chỉ có thể chứa các giá trị đã tồn tại trong chat bảng, id cột.

Ví dụ, nếu cột CHAT.id chứa:

id 
---- 
a 
b 
c 

..you không thể thêm bất kỳ giá trị khác hơn là a/b/c vào cột chat_id.

Các vấn đề liên quan