目录
1.前言
2.表与表关系
1.一对多关系
2.多对多关系:
3.一对一关系
3.对表总结:
4.补充:
1.修改表
2.复制表
1.前言
1.方法:foreign key :外键
外键就是用来帮助我们建立表与表之间关系的(绑定)
2.表的关系
表与表之间最多只有四种关系
一对多关系
在MySQL的关系中没有多对一一说
一对多 多对一 都叫一对多!!!
多对多关系
一对一关系
没有关系
2.表与表关系
1.一对多关系
一对多关系
1.思考路:
换位思考 分别站在两张表的角度考虑
判断表与表的关系
2.foreign key使用过程中注意问题:
(1).一对多表关系 外键字段建在多的一方
(2).在创建表的时候 一定要先建被关联表(一,少的一方)
(3).在录入数据的时候 也必须先录入被关联表
3.foreign key只是绑定两表关系,容易查询
若要改变一张表,另一个表也跟着变化,引入级联cascade做到同步
4.语法:
建dep身份职位表与emp成员表为例:
create table dep(
id int primary key auto_increment, # 主键+自增
dep_name char(16),
dep_desc char(32)
);
create table emp(
id int primary key auto_increment,
name char(16),
gender enum('teacher','teacher','teacher') default 'teacher',
dep_id int,
foreign key(dep_id) references dep(id)
on update cascade # 同步更新(注意,不用分号)
on delete cascade # 同步删除
);
insert into dep(dep_name,dep_desc) values('学生','读书'),('老师','教书'),('校长','管理');
insert into emp(name,dep_id) values('zcy',2),('mxg',1),('wsx',1),('lzr',3);
2.多对多关系:
1.思路:
在使用foreign key时,注意点:要先建被关联表
故:通过单独再开设一张 专门用来存储两张表数据之间的关系
2.使用:
建book图书表与author作者表为例:
create table book(
id int primary key auto_increment, # 主键+自增
title varchar(32),
price int
);
create table author(
id int primary key auto_increment,
name varchar(32),
age int
);
create table book2author(
id int primary key auto_increment,
author_id int,
book_id int,
foreign key(author_id) references author(id)
on update cascade # 同步更新(不用分号,是一句)
on delete cascade, # 同步删除
foreign key(book_id) references book(id)
on update cascade # 同步更新
on delete cascade # 同步删除
);
# 从上到下依次输入数据
3.一对一关系
1.思路:
一对一关系,好比如一个表对应信息是另一个表的详细信息描述(一一对应)
注意:一对一 外键字段建在任意一方都可以 但是推荐建在查询频率比较高的表中
2.用法(客户表和学生表):
create table customer(
id int primary key auto_increment,
phone int,
addr varchar(64)
);
create table student(
id int primary key auto_increment,
name varchar(32),
age int,
student_id int unique, #
foreign key(student_id) references customer(id)
on update cascade # 同步更新
on delete cascade # 同步删除
)
# 从上到下依次输入数据
3.对表总结:
1.表关系的建立需要用到foreign key
一对多
外键字段建在多的一方
多对多
自己开设第三张存储
一对一
建在任意一方都可以 但是推荐建在查询频率较高的表中
2.判断表之间关系的方式
换位思考!!!
员工与部门
图书与作者
作者与作者详情
4.补充:
1.修改表
MySQL对大小写是不敏感的
1.修改表名
alter table 表名 rename 新表名;
2.增加字段
alter table 表名 add 字段名 字段类型(宽度) 约束条件;
alter table 表名 add 字段名 字段类型(宽度) 约束条件 first;
alter table 表名 add 字段名 字段类型(宽度) 约束条件 after 字段名;
3.删除字段
alter table 表名 drop 字段名;
4.修改字段
alter table 表名 modify 字段名 字段类型(宽度) 约束条件;
alter table 表名 change 旧字段名 新字段名 字段类型(宽度) 约束条件;
2.复制表
sql语句查询的结果其实也是一张虚拟表
复制表:只能复制类型与内容
create table 表名 select * from 旧表; 不能复制主键 外键 ...
create table new_dep2 select * from dep where id>3;