阿里Java学习路线:阶段 2:数据库开发-SQL进阶及查询练习:课时9:一对一关系

数据库一对一关系

在表中建立一对一关系比较特殊,需要让其中一张表的主键,既是主键又是外键。

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是外键,这就完成了一对一关系。

综上,从表的主键就是外键可以实现一对一关系。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值