第二十四章 零基础学MySQL2

7.多表查询

1.查询增强

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

2.分页查询

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

3.分组增强

在这里插入图片描述
(1)
在这里插入图片描述
在这里插入图片描述
(2)
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
里面不管写上面都可以,只要是一个非空值,它就会统计进去
在这里插入图片描述
下面这样写同样可以
在这里插入图片描述

(3)
在这里插入图片描述
mgr是上级编号,但里面有重复的
distinct(不同的)就是去重
在这里插入图片描述
(4)
在这里插入图片描述

4.多子句查询

在这里插入图片描述
having用来对分组的结果进行过滤
在这里插入图片描述

5.多表笛卡尔集

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
emp表中没有部门名称,只有部门编号
在这里插入图片描述
部门名称在dept表中
在这里插入图片描述
如果两张表直接一起查询
在这里插入图片描述
下面一共返回了52条信息
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
进行一下筛选,记录由52条变为13条
在这里插入图片描述
之后进一步确定条件,只显示所需要的内容
在这里插入图片描述
deptno需要指定哪个表的deptno,不然会出错
在这里插入图片描述

6.多表查询

在这里插入图片描述
工资级别来自salgrade表,下面是salgrade的记录,共五条
在这里插入图片描述
所以不做任何处理查询两个表的话,会有65条记录(13 * 5)
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

7.自连接

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
King这个人没有上级,所以只有12个
在这里插入图片描述
在这里插入图片描述

8.子查询

1.单行/多行子查询

在这里插入图片描述
单行子查询
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
多行子查询
在这里插入图片描述
要加一个distinct,以防有重复的,比如下面的例子就会出现一个重复的
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
但是上面的还是包含10号部门本身的
在这里插入图片描述
或者这样写
在这里插入图片描述

2.子查询临时表

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
不仅需要id相同,最高的价格与商品价格也要相同
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

3.all 和 any

在这里插入图片描述
在这里插入图片描述
或者下面这种方法
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
或者
在这里插入图片描述

4.多列子查询

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
换成ALLEN
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

5.子查询练习

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

9.表复制

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
再执行一次插入语句,my_tab02表的内容变为原来的两倍
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
下面这条语句执行过后是没有重复记录的
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

10.合并查询

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

11.外连接

1.外连接需求

在这里插入图片描述
在这里插入图片描述
目前我们查出的部门只有三个,但实际上我们的部门表中有四个部门,其中有一个部门没有员工,此时就没有满足题目要求(显示那些没有员工的部门)
在这里插入图片描述
因为我们是靠deptno来进行关联的,但是左边的表没有40这个部门,所以就没有匹配到右边表的最后一行
在这里插入图片描述

在这里插入图片描述
左侧的表即使有没有与右侧的表匹配的记录,左侧表的那些记录的也会显示出来

2.左外连右外连

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
1.
在这里插入图片描述
在这里插入图片描述
2.
在这里插入图片描述
一样的结果
在这里插入图片描述

12.约束

在这里插入图片描述

1.主键(primary key)

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
1.
在这里插入图片描述
2.
在这里插入图片描述
下面是复合主键
id和name同时相同才会出错
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
4.
在这里插入图片描述

2.not null / unique

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

3.外键介绍(foreign key)

在这里插入图片描述
在这里插入图片描述
如果将class_id做成一个外键约束,则此时的sn_003是添加不进去的
在这里插入图片描述
此时想要直接删除id为200的那一行也会失败,除非先删除左边表的sn_002那一行,再删除右边表id为200的那一行
在这里插入图片描述

4.外键使用细节

主表中被外键所在表中外键锁所指向的必须是主键或者unique,不然的话,出现多个会造成混乱
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
Innode是引擎
在这里插入图片描述
4.这里是可以加进去的,此时我不知道id为3的class_id为100还是200,可以先设为空
在这里插入图片描述

在这里插入图片描述

5.check

在这里插入图片描述
在这里插入图片描述

6.练习(商店表设计)

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

13.自增长

在这里插入图片描述
在这里插入图片描述
假如此时再加入一个tom
在这里插入图片描述
也可以用下面这种写法(注意:如果没有设定自增长的话,下面这种写法是错误的,
因为设定默认值)
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
而他下面的增长会从666开始增加
在这里插入图片描述

14.索引

1.索引优化速度

在这里插入图片描述
有一个八百万条记录的索引,我们进行查询,花了4.5秒
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

2.索引机制

在这里插入图片描述
在这里插入图片描述

3.创建索引

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
5.
在这里插入图片描述
1.
在这里插入图片描述
Non_unique为0表示唯一索引,1表示非唯一索引
在这里插入图片描述
2.
第一种方法:添加主键索引,在创建表的时候加一个PRIMARY KEY,此时就已经是主键索引
在这里插入图片描述
第二种方法
如果已经创建好了表,此时还想添加主键索引
在这里插入图片描述

4.删除/修改/查询索引

在这里插入图片描述
删除主键索引时,不用指定哪一列,因为一张表最多一个主键索引
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
上面Key中的MUL表示是索引

5.创建索引规则

在这里插入图片描述

15.事务

在这里插入图片描述

1.事务有什么用

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

2.事务操作

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

3.事务注意事项

在这里插入图片描述
1.
在这里插入图片描述
2.
在这里插入图片描述
在这里插入图片描述
5.
在这里插入图片描述

4.四种隔离级别

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

5.隔离级别演示1

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
将另一个控制台的隔离级别变为 读未提交
在这里插入图片描述
在这里插入图片描述
下面创建一个表,在两个控制台分别进行查看,结果都是空表
在这里插入图片描述

之后在第一个控制台进行在表中插入数据的操作,但没有提交事务,按道理此时在第二个控制台查看表是看不到这个新插入的数据的,但此时却可以看见
在这里插入图片描述
上面这种现象就是脏读
在这里插入图片描述
下面在第一个控制台中进行数据的更新和插入,并且提交事务。在第二个控制台中进行查看,发现可以看见改变,这种现象就是不可重复读和幻读
在这里插入图片描述
在这里插入图片描述
正常情况下,我们在控制台B进行操作且没有提交事务前时,不希望受到其他控制台的影响,比如A的影响,但此时确受到了A的影响。
在这里插入图片描述

接着将第二个控制台设为 读已提交
在这里插入图片描述
此时我在第一个控制台中在表上添加行数据,但在第二个控制台中并没有看到添加的数据。即未产生脏读。
在这里插入图片描述
但是不可重复读和幻读还是存在的
在这里插入图片描述

6.隔离级别演示2

可重复读
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
将第一个控制台的事务提交后也是看不到的
在这里插入图片描述

可串行化
在这里插入图片描述
加锁就是如果发现有一个表正在操作没有被提交,它会卡在那里,不会进一步操作

在这里插入图片描述
在第一个控制台中进行对表的插入更新操作后,且此时没有提交。
在第二个控制台进行查询操作,控制台会卡在那里,不会显示任何结果
在这里插入图片描述
第一个控制台一旦执行提交(commit),第二个控制台立马会出现结果。
在这里插入图片描述
(这里没有出现不可重复读和幻读,因为第一个控制台没有进行commit读退出来,第二个控制台收不到信息)

7.设置隔离

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
设置好以后要重新启动mysql才会生效
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

8.存储引擎1

事务安全性就是支持事务的使用
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

9.存储引擎2

innodb

在这里插入图片描述

myisam

在这里插入图片描述

memory

在这里插入图片描述
在这里插入图片描述
此时关闭并重启mysql
在这里插入图片描述
此时我们的表结构还是在的
在这里插入图片描述
但是其中的数据已经没了
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

16.视图

1.视图原理

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

2.视图使用细节

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
1.
在这里插入图片描述
2.
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

3.视图应用实例

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
三表查询至少需要两个过滤条件
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

17.mysql管理

1.mysql用户管理

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
上面并没有真正删除
下面我们要登入我们刚刚新创建的用户hsp_edu
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

2.mysql权限管理

在这里插入图片描述
一般是通过root用户给其他用户授权
在这里插入图片描述
下面这个就是表示要将这个权限赋给所有数据库的所有对象
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
先创建一个用户
在这里插入图片描述
下面进行登入
在这里插入图片描述
下面再root用户下进行操作
在这里插入图片描述
在这里插入图片描述
之后在shunping用户中发现多了数据看testdb和表news
在这里插入图片描述

我们也可以进行一些操作
在这里插入图片描述
但不能进行修改
在这里插入图片描述
此时在root中给shunping增加update权限
在这里插入图片描述
此时操作成功
在这里插入图片描述
下面是修改shunping密码的操作
在这里插入图片描述
此时必须用新密码进行登入
在这里插入图片描述
下面是回收权限
下面两种写法都可以
在这里插入图片描述
最后是删除顺平这个用户
在这里插入图片描述
此时无法登入
在这里插入图片描述

3.mysql管理细节

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
但Smith不能这样删除
在这里插入图片描述
在这里插入图片描述

  • 18
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值