2010-02-03 260 views
23

創建表時,如何使用references關鍵字?如何在MySQL中使用關鍵字'references'?

比方說,我想創建兩個表personhobby,我希望愛好表ID引用人的ID?

person table 
- id 
- name 

hobby 
- id 
- person_id 
- hobby_name 

我該怎麼做?

+1

值得注意的是,內聯FK('HobbyID INT REFERENCES Hobbies(ID)')不起作用。這最近被報告爲一個bug(http://bugs.mysql.com/bug.php?id=4919),所以我確信他們很快就會處理它。 – 2013-10-09 16:03:56

回答

28

創建嗜好表類似於此:

CREATE TABLE hobby (
    id INT NOT NULL AUTO_INCREMENT, 
    person_id INT NOT NULL, 
    hobby_name VARCHAR(255), 
    PRIMARY KEY(id), 
    FOREIGN KEY(person_id) REFERENCES person(id)) 
6

下面是一個例子directly from MySQL website

CREATE TABLE parent (id INT NOT NULL, 
        PRIMARY KEY (id) 
) ENGINE=INNODB; 

CREATE TABLE child (id INT, parent_id INT, 
        INDEX par_ind (parent_id), 
        FOREIGN KEY (parent_id) REFERENCES parent(id) 
        ON DELETE CASCADE 
) ENGINE=INNODB; 
+0

什麼是「ON DELETE CASCADE」先生? – sasori 2010-02-03 13:51:50

+2

@sasori - 這意味着當你刪除表中的一條記錄時,表中的所有記錄都會被刪除。這被稱爲「級聯刪除」。 – 2010-02-03 14:10:01

6
CREATE TABLE person (person_id INT NOT NULL, 
PRIMARY KEY (person_id)); 

CREATE TABLE hobby (hobby_id INT NOT NULL, person_id INT NOT NULL, 
PRIMARY KEY(hobby_id), 
FOREIGN KEY(person_id) REFERENCES person(person_id)); 

的參考文獻關鍵字用來定義哪些表和列是在使用外鍵關係。這意味着愛好表中的記錄必須具有person表中存在的person_id,否則在插入時您將收到該關鍵字不存在的錯誤。

要回答上面有關「ON DELETE CASCADE」的作用的問題,它允許您刪除父鍵記錄(親自)並且它是相應的子記錄(在愛好中),而不必首先刪除所有子記錄。

爲了澄清,如果您有連接到一個主鍵條目兒童的記錄,並嘗試刪除像主鍵條目:

DELETE FROM person where person_id = 1; 

而無需刪除CASCADE,您將收到如果任何錯誤愛好中的記錄具有1的person_id's。在執行上面的刪除操作之前,您應先刪除所有這些記錄。使用DELETE ON CASCADE時,上面的刪除操作將成功並自動刪除鏈接到將從主鍵表中刪除的person_id的表愛好表中的所有記錄。

1

引用關鍵字實際上用於知道外鍵到了哪裏。 這意味着哪個是表名,表中的名稱是什麼。

我說這是正確的:

CREATE TABLE person (person_id INT NOT NULL, 
PRIMARY KEY (person_id)); 

CREATE TABLE hobby (hobby_id INT NOT NULL, person_id INT NOT NULL, 
PRIMARY KEY(hobby_id), 
FOREIGN KEY(person_id) REFERENCES person(person_id)); 

然後,看看這一行: 外鍵(爲person_id)參考人(爲person_id));

這裏person_id是外鍵,它來自person表,它的名字是person_id ... 就是這樣。

-1

下面是一個如何使用它的例子。

create table hobby(id int references person(id),person_id int,hobby_varchar(20), primary key(id)); 

對於這意味着什麼,references允許我們指定到一個外鍵指向目標表列。