0
点赞
收藏
分享

微信扫一扫

mysql专栏 04.多表关系

爱做梦的夏夏 2022-03-30 阅读 69
mysql

01.一对多表关系

[toc]{type: “ol”, level: [2, 3, 4, 5]}

一对多表关系[同时成立]

员工表的一个员工,不能对应部门表的多个部门
部分表的一个部门,可以对应员工表的多个员工

优先创建被关联表

create table dep(
    id int primary key auto_increment,
    dep_name char(16),
    dep_desc char(32)
);

create table em(
    id int primary key auto_increment,
    name char(16),
    gender enum('male', 'female') default 'male',
    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 em(name,dep_id) values('lili',2),('lisa',1),('rose',2);

02.多对多表关系

[toc]{type: “ol”, level: [2, 3, 4, 5]}

多对多的表关系[同时成立]:

书籍表的一本书,可以对应作者表的多个作者
作者表的一个作者,可以对应书籍表的多本书

::: tip
需要单独开设一张表,专门用来存储两张表之间的数据关系
:::
::: tip
书籍表的book_name与新建表的book_id是1对多的关系
:::
::: tip
作者表的author_name与新建表的author_id是1对多的关系
:::

创建表单

create table book(
    id int primary key auto_increment,
    book_name char(32),
    price int
);

create table author(
    id int primary key auto_increment,
    name char(32),
    age int
);

-- 建立关联
create table book_author(
    id int primary key auto_increment,
    book_id int,
    author_id int,
    foreign key(book_id) references book(id) on update cascade on delete cascade,
    foreign key(author_id) references author(id) on update cascade on delete cascade
);

03.一对一表关系

[toc]{type: “ol”, level: [2, 3, 4, 5]}

一对一的表关系[同时成立]:

用户表的一组数据,不能对应详情表的多组数据
详情表的一组数据,不能对应用户表的多组数据

::: tip
如果一个表的数据特别多,但是不是每次查询都需要所有数据,就可以将表一分为二
:::
用户表
id name age
详情表
addr phone hobby email…

创建表单

--关系字段推荐建立在查询频率高的表中
create table user_desc(
    id int primary key auto_increment,
    addr char(32),
    phone int,
    hobby char(32),
    email char(32)
);

create table user(
    id int primary key auto_increment,
    name char(16),
    age int,
    user_desc_id int unique,
    foreign key(user_desc_id) references user_desc(id) on update cascade on delete cascade
);

04.修改表与复制表

[toc]{type: “ol”, level: [2, 3, 4, 5]}

修改表:

修改表名:
    alter table 愿表名 rename 新表名;
增加字段:
    alter table 表名 add 字段名 字段类型(宽度) 约束条件 (first / after);
删除字段:
    alter table 表名 drop 字段名;
修改字段:
    alter table 表名 modify 字段名 字段类型(宽度) 约束条件;
    alter table 表名 change 原字段名 新字段名 字段类型(宽度) 约束条件;

复制表:

    create table 新表名 select * from 原表名;  -->  不能复制键及索引,只能复制数据
举报

相关推荐

0 条评论