数据库一对一关系
在表中建立一对一关系比较特殊,需要让其中一张表的主键,既是主键又是外键。
CREATE TABLE hasband(
hid INT PRIMARY KEY AUTO_INCREMENT,
hname VARCHAR(50)
);
INSERT INTO hasband VALUES(NULL,'刘备');
INSERT INTO hasband VALUES(NULL,'关羽');
INSERT INTO hasband VALUES(NULL,'张飞');
SELECT * FROM hasband;
CREATE TABLE wife(
wid INT PRIMARY KEY AUTO_INCREMENT,
wname VARCHAR(50),
CONSTRAINT fk_wife_hasband FOREIGN KEY(wid) REFERENCES hasband(hid)
);
/* wid: 1.非空; 2.唯一; 3.引用hid */
INSERT INTO wife VALUES(1,'杨贵妃');
INSERT INTO wife VALUES(1,'妲己'); // 与第一个冲突
INSERT INTO wife VALUES(100,'妲己'); // 与外键冲突
INSERT INTO wife VALUES(2,'妲己');
SELECT * FROM wife;
(1)wife表的wid既是主键又是相对于husband表的外键。
(2)husband.hid是主键,不能重复。
(3)wife.wid是主键,不能重复,又是外键,必须来自husband.hid。
所以如果在wife表中有一条记录的wid为1,那么wife表中的其他记录的wid就不能再是1了,因为它是主键,同时在husband.hid中必须存在1这个值,因为wid是外键,这就完成了一对一关系。
综上,从表的主键就是外键可以实现一对一关系。