数据库中,一对一关系:从表的主键既是外键。
CREATE TABLE hasbend( -- 创建主表
hid INT PRIMARY KEY auto_increment, -- 指定字段
hname VARCHAR(50)
);
ALTER TABLE hasbend -- 修改表名
REMOVE TO hasbend;
DROP TABLE hasbend; -- 删除表
INSERT INTO hasbend VALUES(NULL, '刘备'); -- 插入数据
INSERT INTO hasbend VALUES(NULL, '关羽');
INSERT INTO hasbend VALUES(NULL, '张飞');
SELECT * FROM hasbend; -- 查询表
-- 用wife的主键作为hasbend的外键(一对一关系)
CREATE TABLE wife(
wid INT PRIMARY KEY auto_increment, -- wid:1.非空 2.唯一 3.引用hid
wname VARCHAR(50),
CONSTRAINT fk_wife_hasbend FOREIGN KEY(wid) REFERENCES hasbend(hid)
);
INSERT INTO wife VALUES(1, '杨玉环');
INSERT INTO wife VALUES(2, '苏妲己');
INSERT INTO wife VALUES(3, '西施');
SELECT * FROM wife;
-- 其中wife表的wid即是主键,又是相对hasbend表的外键
-- wife.wid是主键,不能重复,又是外键,必须来自hasbend.hid.
-- 所以如果在wife表中有一条记录的wid为1,那么wife表中的其他记录的wid就不能再是1了,因为他是主键。
-- 同时在hasbend.hid中必须存在1这个值,因为wid是外键,这就完成了一对一关系。
数据库中多对对关系:
在表中建立多对多关系需要使用中间表,即需要三张表,在中间表中使用两个外键,分别引用其他两个表的主键。
CREATE TABLE student( -- 创建学生表
sid INT PRIMARY KEY auto_increment,
sname VARCHAR(50)
)
CREATE TABLE teacher( -- 创建教师表
tid INT PRIMARY KEY auto_increment,
tname VARCHAR(50)
);
CREATE TABLE `stu_tea` ( -- 创建关联表
`sid` int, -- 指定student外键
`tid` int, -- 指定teacher外键
CONSTRAINT `fk_student` FOREIGN KEY (`sid`) REFERENCES `student` (`sid`),
CONSTRAINT `fk_teacher` FOREIGN KEY (`tid`) REFERENCES `teachar` (`tid`)
);
INSERT INTO student VALUES(NULL,'刘德华');
INSERT INTO student VALUES(NULL,'廖朝伟');
INSERT INTO student VALUES(NULL,'周润发');
INSERT INTO student VALUES(NULL,'黎明');
INSERT INTO student VALUES(NULL,'任贤齐');
INSERT INTO teachar VALUES(NULL,'黄飞鸿老师');
INSERT INTO teachar VALUES(NULL,'张三丰老师');
INSERT INTO teachar VALUES(NULL,'叶问老师');
INSERT INTO stu_tea VALUES(1,1); -- 关联两张表中的数据 形成多对多关系
INSERT INTO stu_tea VALUES(2,1);
INSERT INTO stu_tea VALUES(3,1);
INSERT INTO stu_tea VALUES(4,1);
INSERT INTO stu_tea VALUES(5,1);
INSERT INTO stu_tea VALUES(2,2);
INSERT INTO stu_tea VALUES(3,2);
INSERT INTO stu_tea VALUES(4,2);
INSERT INTO stu_tea VALUES(3,3);
INSERT INTO stu_tea VALUES(4,3);
INSERT INTO stu_tea VALUES(5,3);
SELECT * FROM stu_tea;