MySql数据库之多表查询、外键

外键
外键字段>>>:部门编号
    其实就是用来标识表与表之间的数据关系
    # 简单的理解为该字段可以让你去到其他表中查找数据

表与表之间的关系
# 一对多、多对多、一对一、没有关系

### 一对多的表关系:

        员工表:一个员工一个部门 x         部门表:一个部门有多个人 √

# 结论:一个可以,一个不可以,表关系就是:一对多

# 针对于一对多:外键字段要建在多的一方

在SQL层面建立一对多的关系: 先把基础表的中基础字段建立出来,然后在考虑外键字段

create table emp(                 # 员工表,关联
    id int primary key auto_increment,
    name varchar(32),
    age int,
    dep_id int,
    foreign key(dep_id) references dep(id) # 让两张表建立了外键关系
    on update cascade # 级联更新
    on delete cascade # 级联删除
);
 
 
create table dep(         # 部门表,被关联
    id int primary key auto_increment,
    dep_name varchar(32),
    dep_desc varchar(32)
);

## 录入数据

insert into emp(name, age, dep_id) values('kevin', 20, 1);
insert into dep(dep_name,dep_desc) values('人事部', '管理人才');
# 注意:1、在创建表时,要先创建被关联表(没有外键字段的表)

              2、在插入新数据时,要先确保被关联表的数据

              3、在插入新数据时,外键字段只能填写被关联表中已有数据

              4、只有添加了额外配置才能修改和删除被关联表的数据--级联更新、级联删除

### 多对多:

        一本书多个作者        一个作者可以写多本书

# 结论:如果两个都可以,那么表关系就是'多对多'

# 针对于多对多的表关系:外键字段建在第三张表中

在SQL层面建立多对多的表关系

create table book(
    id int primary key auto_increment,
    title varchar(32),
    price decimal(8,2)
);
 
create table author(
    id int primary key auto_increment,
    name varchar(32),
    addr varchar(32)
);
 
create table book2author(
    id int primary key auto_increment,
    book_id int,
    author_id int,
    foreign key(book_id) references author(id) # 让两张表建立了外键关系
    on update cascade # 级联更新
    on delete cascade, # 级联删除
    foreign key(author_id) references book(id) # 让两张表建立了外键关系
    on update cascade # 级联更新
    on delete cascade
);

## 录入数据

insert into book(title, price) values('金瓶梅', 1000);
insert into book(title, price) values('西游记', 2000);
insert into author(name, addr) values('zhangsan', 'beijing');
insert into author(name, addr) values('lisi', 'shanghai');
 
insert into book2author(book_id, author_id) values(1, 1);
insert into book2author(book_id, author_id) values(1, 2);
insert into book2author(book_id, author_id) values(2, 1);
insert into book2author(book_id, author_id) values(2, 2);
### 一对一:

        作者表       作者详情表  /分为热数据和冷数据

# 针对一对一:两张表都可以,但是,推荐建在查询频率较高的一张表

在SQL层建立一对一的关系

create table author1(
    id int primary key auto_increment,
    name varchar(32),
    gender varchar(32),
    author_detail_id int unique,
    foreign key(author_detail_id) references author_detail(id)
    on update cascade
    on delete cascade
);
 
 
create table autho

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值