MySQL学习5——外键续

## 一对多补充

# 级联删除 (当一张表删除记录时,若绑定给了另一张表中的外键,则一同删除另一张表中关联的记录)

# 更新于删除都需要考虑到关联与被关联的关系>>>同步更新与同步删除

# 被关联表
create table dep(
    id int primary key auto_increment,
    dep_name char(10),
    dep_comment char(60)
);
# 关联表
create table emp(
    id int primary key auto_increment,
    name char(16),
    gender enum('male','female') not null default 'male',
    dep_id int,
    foreign key(dep_id) references dep(id)
    # 级联更新(同步更新)
    on update cascade  
    # 级联删除(同步删除)
    on delete cascade
);

# 先插入被关联表数据
insert into dep(dep_name,dep_comment) values
('教学部','教授python课程'),
('外交部','上海校区形象大使'),
('技术部','技术能力部门');


# 再插入关联表数据
insert into emp(name,gender,dep_id) values
('a','male',1),
('b','male',2),
('c','male',1),
('d','male',1),
('e','female',3);


# 查看两张表数据
select * from emp;
select * from dep;

# 删除部门后,对应的部门里面的员工表数据对应删除
delete from dep where id=3;


# 更新部门后,对应员工表中的标示部门的字段同步更新
update student set sid=3 where sid=2;

 

## 多对多

# 建立第三张表,该表中有一个字段fk左表的id,还有一个字段是fk右表的id

# 1) 先创建作者表
create table author(
    id int primary key auto_increment,
    name char(16)
);
# 2) 创建图书表
create table book(
    id int primary key auto_increment,
    bname char(16),
    price int
);
# 3) 创建第三张关联表
create table author2book(
    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
);

## 一对一

# 左表的一条记录唯一对应右表的一条记录,反之也一样

# 被关联表
create table customer(
    id int primary key auto_increment,
    name char(20) not null,
    qq char(10) not null,
    phone char(16) not null
);
# 关联表
create table student(
    id int primary key auto_increment,
    class_name char(20) not null,
    customer_id int unique, # 注意: 该字段一定要是唯一的
    foreign key(customer_id) references customer(id) #外键的字段一定要保证unique
    on delete cascade
    on update cascade
);

# 三种外键关系都是用foreign key,区别在于如何使用以及其他条件限制即可做出三种关系

## 表的一些补充操作

1. 修改表名
  ALTER TABLE 表名 RENAME 新表名;
2. 增加字段
  ALTER TABLE 表名 ADD 字段名 数据类型 [完整性约束条件…],
  ADD 字段名 数据类型 [完整性约束条件…];
  ALTER TABLE 表名 ADD 字段名 数据类型 [完整性约束条件…] FIRST;
  ALTER TABLE 表名 ADD 字段名 数据类型 [完整性约束条件…] AFTER 字段名;
3. 删除字段
  ALTER TABLE 表名 DROP 字段名;
4. 修改字段 # modify只能改字段数据类型完整约束,不能改字段名,但是change可以!
  ALTER TABLE 表名 MODIFY 字段名 数据类型 [完整性约束条件…];
  ALTER TABLE 表名 CHANGE 旧字段名 新字段名 旧数据类型 [完整性约束条件…];
  ALTER TABLE 表名 CHANGE 旧字段名 新字段名 新数据类型 [完整性约束条件…];

5.复制表结构+记录 (key不会复制: 主键、外键和索引)
  create table 新的表名 select * from 已存在的表名

6.只复制表结构
  create table 新表名 like 已存在的表名;

posted @ 2020-07-02 15:09  最冷不过冬夜  阅读(120)  评论(0编辑  收藏  举报