2016-05-30 86 views
0

我在將所有外鍵與主鍵鏈接時遇到問題。我有兩個表格:MySql外鍵主鍵不匹配

CREATE TABLE Patients 
     (pid  INT NOT NULL AUTO_INCREMENT, 
     name  VARCHAR(25), 
     address  VARCHAR(30), 
     telephone VARCHAR(10), 
     care_centre_id INT, 
CONSTRAINT Patients_PK PRIMARY KEY (pid)); 

CREATE TABLE Care_centres 
     (cid  INT NOT NULL AUTO_INCREMENT, 
     name  VARCHAR(25), 
     location  VARCHAR(30), 
     nurse_charge_id INT, 
CONSTRAINT Care_centres_PK PRIMARY KEY (cid)); 

ALTER TABLE Patients ADD FOREIGN KEY (care_centre_id) REFERENCES Care_centres(cid); 

cid是Care_centres表的主鍵,care_cente_id是Patients表的外鍵。每當我運行查詢表(MySql)時,它都會在外鍵中顯示NULL值。如何索引外鍵與主鍵的對應關係,隨機賦值給外鍵是可以的。

mysql> SELECT * FROM Patients; 
+-----+--------+----------------+------------+----------------+ 
| pid | name | address  | telephone | care_centre_id | 
+-----+--------+----------------+------------+----------------+ 
| 1 | Joe | 8 Walker Road | 7800921111 |   NULL | 
| 2 | Jose | 10 Runner Road | 7800922222 |   NULL | 
| 3 | Joseph | 12 Jogger Road | 7800923333 |   NULL | 
+-----+--------+----------------+------------+----------------+ 

任何想法?

謝謝。

+1

僅僅因爲你指定了一個FK並不意味着mysql可以神奇地爲你填充這些值。由於您允許'care_center_id'爲空,因此mysql不需要'care_centers'中的匹配父記錄。 –

+0

感謝您的幫助!我想我現在明白了。 –

回答

0

將行插入到患者表中時,您需要指定care_centre_id列以創建患者與指定護理中心之間的關聯。否則數據庫無法知道哪個病人屬於哪個護理中心。

因此,舉例來說,假設你有這樣的護理中心:

+-----+--------+----------------+------------+ 
| cid | name | location  | nurse_charge_id | 
+-----+--------+----------------+------------+ 
| 1 | centre1| someplace  | 1    | 
| 2 | centre2| someplace else | 1    | 

你可以,例如,指派喬和何塞護理中心1和約瑟夫關心CENTR 2

+-----+--------+----------------+------------+----------------+ 
| pid | name | address  | telephone | care_centre_id | 
+-----+--------+----------------+------------+----------------+ 
| 1 | Joe | 8 Walker Road | 7800921111 |   1 | 
| 2 | Jose | 10 Runner Road | 7800922222 |   1 | 
| 3 | Joseph | 12 Jogger Road | 7800923333 |   2 | 

您會在您首次插入患者期間或在後續更新期間執行此操作。