2016-05-30 117 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 | 

您会在您首次插入患者期间或在后续更新期间执行此操作。