这里写目录标题
多表设计
一对多
简介
一个表的某个字段,对应一个表
父表 子表
物理外键
需求分析
sql语句添加物理外键
设置物理外键的sql语句
为子表设置物理外键,关联父表主键
idea图形化工具设置外键
仍然是modify table ,图形化来修改表的字段
删除物理外键,仍然是从modify table删除外键
一对一
任意选一个表设置外键,关联对方主键,即可实现一对一
多对多
对于多对多,需要建立第三张表,第三张表中,设置一个id,两个外键,分别关联两方主键,从而实现数据库层的联系
多表查询
简介
针对于多张表有联系的查询
如果不加任何条件。直接进行查询, 那么就会产生无效的笛卡尔积,就像下图
所以可以加上条件,消除无效的笛卡尔积
这里所加的条件,就是所谓的逻辑外键
内连接查询
刚刚在简介部分就是使用隐式内连接
具体代码
第一行代码解释:在where之后,为了区分,在每个键的前面加上了 “表名+.” ,而且前面查询内容也用表名提前区分
第二行代码解释:可以在from后对表起一个别名,之后在设置条件以及查询时,都要用别名代替表名来区分
外连接查询(一般用于需求里面有“空”类似的意思的需求)
格式与上面显性内连接差不多
select 字段 from 表1 join 表2 on 连接条件
将表一与表二连接
如果是左连接,加个left ,那么会包含左边表中不是交集的部分
右连接同理,
但是左右连接取决于表的位置,所以 右连接可以被替换为左连接
(如以下第三行)
子查询
简介以及分类
标量子查询
例子
这里要先查询出来部门的id 之后拿着这个id去查员工信息
可以利用一个子查询结合起来
例子2
图中光标高亮的部分,就是所谓的子查询,该子查询的结果,是一个单行单列的值,所以,叫做标量子查询
列子查询
之所以叫列子查询,是因为(见下图),光标高亮的部分就是所谓的子查询,该部分查询的结果是一列数据,所以叫列子查询
例子
上面可以优化为下面这样
行子查询
例子
优化前:
优化后
这里注意格式需要改变一下,改成(xxx,xxx,xxx,…)=(查询语句)
表子查询
例子
图中光标高亮的部分,实际上就是第一行代码,将第一行代码括起来 起个别名 就可以当作一张临时表使用,之后采用内连接,完成需求
案例
案例1
分析需求时,首先要先明确涉及哪些表
再看所查询的需求是否涉及到多张表的联系,考虑是否需要用到内连接,大部分情况下需要
之后根据需求写语句
这里注意,要想查询“各个大类下的xxx数据”,要用分组查询,如上图
案例2
当三个表需要建立内连接时,直接建立即可,连接条件用and连接
总结
事务
简介
基本操作
手动进行事务的打包
首先开启事务
之后执行,如果都成功,那么执行手动commit,只有执行了commit,数据库才会更新
如果有一处失败,那么手动执行rollback,这样虽然事务执行完毕,但是因为还没有执行commit,那么数据库还不会更新,就不会导致数据库的不完整