MySQL_表关系、外键、修改表

概要
 
1 外键
2 几种表与表之间的关系
3 表关系操作总结
4 表SQL语句补充
 
详细
 
 
1 外键 foreign key
 
定义: 链接 表与表之间关系的字段.
作用: 让当前这个表的字段跟另外一张表的字段建立关系.
不理解请看: 2-1 图,其中 "部门编号"就是外键字段,在其后面的cmd中有实际创建演示,
 
2 几种表关系(4种)
 
2-1 一对多
 
例:员工表和部门表
  • 为什么是一对多?
    • 站在员工表角度: 一个员工只能对应一个部门;
    • 站在部门角度: 一个部门可以对应多个员工;
 
 
说明:
  • 外键创在哪: 创在"多的"哪个表
  • 先创建无外键的表
  • 再创建有外键的表(先写基本表语句,最后写关于外键的语句)
 
2-1.1
cmd演示
 
#1 创建无外键的部门表
 
 
2-1.2
若要对被关联的表做数据的"修改、删除"操作行吗?
 
如下: 不能.即本例中无法对部门表做修改或者删除操作
因为,你要删除或修改某部门信息,那么它所对应的员工表中的该部门的员工怎么办?
 
若要做到关联操作:
那么需把原来的外键语句这样写: 
 
看清楚,这是一句,为了看的清除,所以分三行写;
foreign key(author_id) references author(id)
on update cascade  # 级联更新
on delete cascade  # 级联删除
 
 
#2 创建员工表并通过外键与部门表绑定
 
 
2-2 多对多
 
例: 书籍表和作者表
  • 为什么是多对多? 
    • 站在书的角度,一本书可以有多个作者;
    • 站在某个作者的角度,他可以有多本书;
 
cmd演示
  • 注意: 需要创建第三个表来建两者之间的关系
#1 创建书籍表
#2 创建作者表
#3  创建关联两者的关系表
# 4 给作者表添加数据
 
 
2-3 一对一
 
例:作者表与作者详情表
  • 为什么是一对一?
    • 站在作者表角度考虑: 一个作者只能对应一个关于该作者的详细信息
    • 站在作者详细信息角度考虑: 一个作者的详细信息也只能对应一个作者
 
 
 
cmd演示
 
外键建在哪?
  • 外键字段建在任何一方都可以 但是推荐建在查询频率较高的表中
 
#1 创建"其他信息表"
 
#2 创建"主要信息表"
 
#3 创建"其他信息表"内容
其中电话号码因设置为int不够而报错,只能把位数改小,应设置为bigint
#4  创建"主要信息表"内容
注意: 加约束条件->detail_info_id中加入unique
其中,外键id=1有了后再建一个id=1的内容,报错,说明 detail_info_id中加入unique生效,且必须加,因为本次表关系要求是一对一,不加没法约束一对一的关系.
 
2-4 还有一种情况就是: 表之间没有关系
 
 
3 表关系操作总结
 
3-1 针对表操作
 
  • 找表->判断关系->建外键->建sql表
  • 先创建被关联表(没有外键字段的表)
  • 在插入新数据的时候 应该先确保被关联表中有数据
  • 在插入新数据的时候 外键字段只能填写被关联表中已经存在的数据
 
3-2  什么时候不用外键创建表关系
  • 由于外键有实质性的诸多约束 当表特别多的时候外键的增多反而会增加耦合程度,
  • 这时怎么办?
    • 通过SQL语句层面 建立逻辑意义上的表关系
    • 如: 操作员工表的sql执行完毕之后 立刻跟着执行操作部门的sql语句
 
4 修改表
 
4-1 修改表名
alter table 原表名 rename 新表名;
 
4-2 增加字段
#1 尾部追加
alter table 表名 add 字段名 数据类型 约束条件 ;
 
#2 添加到开头
alter table 表名 add 字段名 数据类型 约束条件 first;
 
#3 添加到某字段后
alter table 表名 add 字段名 数据类型 约束条件 after 字段;
 
4-3 删除字段
alter table 表名 drop 字段名;
 
4-4 修改字段
 
#1 修改字段类型
alter table 表名 modify 字段名 新字段类型 原或新的约束条件;
#2 修改字段名
alter table 表名 change 旧字段名 新字段名 原或新的字段类型 原或新的约束条件;
 
 
posted @   tslam  阅读(182)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 零经验选手,Compose 一天开发一款小游戏!
· 一起来玩mcp_server_sqlite,让AI帮你做增删改查!!
点击右上角即可分享
微信分享提示