mysql书外键_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 已存在的表名;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值