MySql外键一对一,一对多,多对多表关系
多对一就是一对多吗?
查找表关系一定要换位思考,就是要站在两张表角度全部考虑完毕才能下结论,否则无法的出正确答案。
单向的多对一,就是一对多的外键关系。
一对多:
简单举个例子:比如说一个公司里面有很多部门,而且有很多员工分别在不同的部门里,我们可以先站在员工的角度看是否能多个员工同属于一个部门,也就是说一个部门是否有多个员工?当然是可以的。这里我们确定了员工是单向多对一个部门的。再站在部门的角度来看能否可以有多个部门对应一个员工?显然是不可以的。
总结一下就是员工和部门之间关系如果仅仅是单向的多对一那么他们的表关系就是一对多。
【一对多是逻辑上的关系,如何实现它?】
外键就是让表与表之间有硬性层面上的关系,而不是你说它们有关系它们就有关系了。
如何让两种表有代码层面上真正的关联呢?就得使用外键,外键语法:foreign key
一对多建立表关系:
外键约束:
在创建表的时候 必须先创建被关联表。插入数据的时候 也必须先插入被关联表的数据。
建表:
部门表:
create table dep(
id int primary key auto_increment,
dep_name varchar(32),
dep_desc varchar(128)
);
?
?
建员工表:
create table emp(
id int primary key auto_increment, # id相当于主键,并且自动递增
emp_name varchar(64),
emp_gender enum('male','female','others') default 'male', #默认值
dep_id int,
foreign key(dep_id) references dep(id) # 约束条件
);
插入数据:
插入数据
insert into dep(dep_name,dep_desc) values('外交部','搞外交'),
('教学部','教书育人'),
('技术部','技术能力有限部门');
insert into emp(emp_name,dep_id) values('员工1',1),
('员工',2),
('员工3',2),
('员工4',3);
?