> 文档中心 > 3天学完Mysql

3天学完Mysql


p3 命令行连接mysql

今天2021.12.12
一开始使用mysql -u root -p 登录mysql时候
忘了root用户的密码
可以将mysql文件夹中my.ini文件中的skip-grant-tables使用#注销,这样就不会进行安全检查
但是注销后要net stop mysql
然后net start mysql
相当于重启mysql服务才会生效

从y总课中知道
数据库有:mysql和redis两种类型的
redis是内存数据库

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

p4 安装Navicat

show databases;
3天学完Mysql
use mysql;
3天学完Mysql
show tables;
在这里插入图片描述

p5 安装SQLyog

SQLyog的各个版本的下载链接

https://github.com/webyog/sqlyog-community/wiki/Downloads
在这里插入图片描述

p6 Mysql三层结构

Mysql的端口号

在这里插入图片描述

三层结构:数据库管理系统——>数据库——>表
在这里插入图片描述
在这里插入图片描述
mysqld这个程序在3306这个端口监听
是DBMS中最重要的一个程序之一
mysqld是dbms核心的监听程序
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
上图中,等服务器端查询到之后再返回给客户端数据

p7 java操作Mysql

p8 创建数据库

在这里插入图片描述

创建普通的数据库db01

create database db01

删除数据库

drop database db01(此处为数据库名字)

创建使用utf8字符集的的数据库db02

create database db02 character set utf8

创建使用utf8字符集且带校验规则为区分大小写的数据库db03

create database db03 character set utf8 collate utf8_bin

默认校验规则为utf8_general_ci:不区分大小写
区分大小写的校验规则:utf8_bin

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

p9 查看 删除 数据库

在这里插入图片描述

查看当前数据库服务器中的所有数据库

show databases#有s

在这里插入图片描述

显示数据库创建语句

show create database `db03`

在这里插入图片描述
在创建数据库/表的时候为了规避关键字可以使用反引号`来解决
eg:create database create 会报错
在create上增加反引号即可解决

用关键字来创建表或者数据库时要加上反引号`

删除数据库

drop database db03

p10备份恢复数据库

看视频效果更好

备份数据库(在DOS下执行)

sqldump -u 用户名 -p -B 数据库1 数据库2 数据库n > 文件名.sql(此处也可以是路径)

mysqldump命令在mysql安装目录的bin目录下
在这里插入图片描述
3天学完Mysql

恢复数据库(在DOS下的Mysql命令行执行)

source 文件名.sql

进入Mysql命令行 如果不执行mysql -u root -p进入mysql命令行的话只能备份,不能恢复
在这里插入图片描述
使用mysql -u root -p进入mysql命令行后即有mysql>提示符时可以使用恢复命令
3天学完Mysql
法二:因为备份文件是sql语句
所以可以将备份文件拷贝后到SQLyog的编辑区中整体执行即可

练习:备份db02和db03库中的数据并且恢复

备份

mysqldump -u root -p -B db02 db03 > C://back.sql

C盘下back.sql文件就是一系列sql语句
所以备份的文件就对应的是备份sql语句
恢复
法一:source C://back.sql
法二:打开back.sql文件将其内容复制后在SQLyog的查询编辑器中全部执行即可

备份表-不想备份整个数据库即不想备份整个表只想备份几个表

mysqldump -u root -p 数据库 表12 表n > C://文件名.sql

在这里插入图片描述

p11创建表

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

p12 Mysql列类型即数据类型

在这里插入图片描述在这里插入图片描述
在这里插入图片描述
标红表示用得较多
在这里插入图片描述
在这里插入图片描述

p13 整型

在这里插入图片描述
3天学完Mysql
在这里插入图片描述

p14 bit

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

p15 小数型

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

p16 字符串1(char varchar)

utf8:3字节表示1字符
gbk:2字节表示1字符

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

p17 字符串2-使用的细节

utf8编码:1字符=3字节
gbk编码:1字符=2字节

char()括号中的表示字符而不是字节

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

定长与变长

varchar相当于一个可伸缩的盒子
存放文章一般用varchar
在这里插入图片描述

什么时候用char什么时候用varchar

如果数据就是定长的就是固定的大小就用char
所以查询速度比varchar更快
在这里插入图片描述

varchar不够用可以使用text mediumtext 或者更大的text 还有

在这里插入图片描述
注意text不能带有默认值
如content text
而不是content text(10)

字符串用单引号
java中字符串用双引号

在这里插入图片描述

p18 日期类型

如果需要某列的属性为timestamp能够自动更新还需要配置如下黄色语句
3天学完Mysql
在这里插入图片描述

p19 创建表练习

在这里插入图片描述
hsp写的
在这里插入图片描述

p20 修改表——重要

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

1 在表中增加一列

alter table empadd 列名 varchar(32) not null default ' 'after resume#表明在resume列后面插入这列

在这里插入图片描述

2 修改表中的某一列![

alter table empmodify 列名 varchar(60)#表示修改这一列的长度原为32现为60

在这里插入图片描述

3 删除表中某一列

alter table 表名如empdrop 列名如sex列

在这里插入图片描述

4 修改表名

rename table 原表名emp to 新表名employ

在这里插入图片描述

5 修改表的字符集

alter table 表名如employ character set utf8或alter table 表名如employ charset utf8#这些语句后面可以带;也可不带;

在这里插入图片描述

6修改列名 注意与修改表名对比

alter table 表名change 原列名 新列名 新列的附加属性

在这里插入图片描述

p21insert基本使用

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

在这里插入图片描述

p22 insert注意事项

以goods表为例
3天学完Mysql

1 插入的数据应与字段/列的数据类型相同

在这里插入图片描述

2 数据长度应在列规定的范围内

在这里插入图片描述

3 insert的数据应与表中的列对应

在这里插入图片描述

4 字符和日期应当在单引号内——重要

在这里插入图片描述

5 可以插入空值前提此列可以为空即无not null附加条件

3天学完Mysql
限制表中某字段为非空
如下定义表中没有限制字段为非空即没有not null
所以可以为空即null
在这里插入图片描述

6 一次性添加多条记录——重要

insert into 表名 (表中的列名) values (),(),()如inset into goods (id,goods_name,price)values(20,'三星手机',20),(89,'苹果手机',90)

在这里插入图片描述

7 如果给所有列/字段添加数据可不写字段名

3天学完Mysql

8 默认值的使用1——重要

在这里插入图片描述

指定某列的默认值

3天学完Mysql
3天学完Mysql
如先创建一个goods2表,其price列的默认值为100
3天学完Mysql
在这里插入图片描述

p23 update语句

在这里插入图片描述

3天学完Mysql
在这里插入图片描述
在这里插入图片描述
3天学完Mysql

p24 delete语句

在这里插入图片描述
3天学完Mysql
在这里插入图片描述
在这里插入图片描述

删除表中记录

delete from 表名:只能删除所有记录但是表还在
在这里插入图片描述

删除整个表

要删除整个表:drop table 表名
表没有了里面的记录也自然没有了
3天学完Mysql

p25 select语句1

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

p26 select语句2

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

列运算——算某几列的总和

select `name`(chinese+english+math) from student

列取别名

select 原列名 as 新列名即别名 from 表名

在这里插入图片描述

p27 select语句3

where子句中的运算符

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
3天学完Mysql
在这里插入图片描述

在这里插入图片描述
3
3天学完Mysql
4
在这里插入图片描述

p28 select语句4——查询结果排序

在这里插入图片描述
1
3天学完Mysql
2
3天学完Mysql
3我写的
在这里插入图片描述
3hsp写的
在这里插入图片描述

p29 统计/合记函数

count函数:返回行的总数

在这里插入图片描述
统计班级共多少学生
就用select count(*) from student
就返回student这个表中所有的行数即学生个数

在这里插入图片描述

count(*)和count(列)

上述第一条写成这样则
3天学完Mysql
在这里插入图片描述
3天学完Mysql
3天学完Mysql

sum函数:求和-只对数值列起作用

在这里插入图片描述
在这里插入图片描述
3天学完Mysql
3天学完Mysql
3天学完Mysql
3天学完Mysql

avg函数:求平均值-只对数值列起作用

在这里插入图片描述
3天学完Mysql

MAX/MIN函数

在这里插入图片描述
在这里插入图片描述
想知道总分最高和最低是谁:要用到子查询

在这里插入图片描述

p30 分组统计

在这里插入图片描述
3天学完Mysql
1
在这里插入图片描述
没有group by则是求得整个表得最高薪水
在这里插入图片描述
3天学完Mysql
两位小数
3天学完Mysql

2
在这里插入图片描述
在这里插入图片描述
3
3.1
3天学完Mysql
在这里插入图片描述
在这里插入图片描述
3.2
3天学完Mysql

在这里插入图片描述

p31 字符串函数

在这里插入图片描述

p32字符串函数练习

p33 数学函数

p34 日期函数1

p35 日期函数2

p36 日期函数3

p37 加密函数----2021.12.15开始

在这里插入图片描述

查询当前用户

select user()select user() from dual

在这里插入图片描述

查询当前使用的数据库名称

select database()或者select database() from dual #加上只是为了看起来不那么怪

在这里插入图片描述

MD5加密

select MD5()select MD5() from dual或者

加密的意义:假设root用户的密码是hsp但是存到系统中不能是hsp因为当数据库被爆破了就被看见了所以要使用MD5来加密

不管str即你的密码有多长经过MD5后都是32位

select length(MD5('HSP'))#返回的是32select length(MD5('HSPdsadasdsa'))#返回的还是32

演示案例
在这里插入图片描述

PASSWORD——mysql密码默认用这个方法加密而不是MD5

select password('mima')select password('mima') from dual

在这里插入图片描述

mysql.user表示:数据库.表

若不带mysql则表示现在这个数据库中的user表 mysql本身也是一个数据库
当带上mysql.user后可以不用切换到mysql数据库后再使用user表 而在db数据库中也可以使用mysql数据库中的表
自己创建的用户还有root用户是放在系统的mysql数据库中 即指定一个库指定一个表名即可不切换数据库查询到其他库中的表

案例:验证root用户的明文密码为hsp放入数据库中使用的是password()加密
在这里插入图片描述
在这里插入图片描述

p38 流程控制函数

在这里插入图片描述

if(exp1,exp2,exp3)

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

ifnull(exp1,exp2)

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

select case when then when then … else end;——类似于多分枝

select case when exp1 then exp2when exp3 then exp4when exp5 then exp6...when expn-2 then expn-1else expn end

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

判断是否为空

判断是空:字段 is null
判断非空:字段 is not null
判断相等:使用一个等号=而不是两个

综合案例

1
3天学完Mysql

select ename from emp if(comm is null,0.0,comm)select ename from emp ifnull(comm,0.0)

2
3天学完Mysql
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

select ename,(select casewhen job = 'CLERK' then '职员'when job = 'MANAGER' then '经理'when job = 'SALESMAN' then '销售'else job end)from emp;

p39 查询增强——为多表做准备

在这里插入图片描述
emp表
3天学完Mysql
dept表
3天学完Mysql
salgrade
3天学完Mysql

为什么要将查询加强

3天学完Mysql
因为之前的单表中还有一些没有讲到所以先在查询加强中讲完再将多表为多表做准备

在这里插入图片描述
1
在这里插入图片描述
2
在这里插入图片描述
3 emp表中没有上级即mgr为null
在这里插入图片描述
在这里插入图片描述

**4 **
在这里插入图片描述
————————————————————————

3天学完Mysql
1
在这里插入图片描述

2——很重要
在这里插入图片描述
此时表中已经按照deptno排好了序
但是每个部门即每个相同的deptno中薪资没有排序
现在要对每个部门中的薪资再进行排序
3天学完Mysql

p40 分页查询

3天学完Mysql
题目
3天学完Mysql
在这里插入图片描述
3天学完Mysql

p41 分组加强

1
在这里插入图片描述
2
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
3
在这里插入图片描述
在这里插入图片描述
4
在这里插入图片描述

p42 多子句查询——很重要

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

p43 多表笛卡尔积——这里开始多表查询——重重重难难难点

emp表
在这里插入图片描述
dept表
3天学完Mysql
salgrade表
3天学完Mysql

1
在这里插入图片描述
2
在这里插入图片描述
3
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
此处不可以使用别名因为使用别名后还是有两个同样的别名
重要提醒
3天学完Mysql
如果5表联查最少需要4个条件
即where中要4个条件最少

p44 多表查询–接着p43继续

显示部门号为10的部门名 员工名 和 工资

部门号涉及dept表,后面的三个要查的涉及emp表,所以多表查询
在这里插入图片描述

select ename,dname,sal,emp.deptno#也可以是dept.deptnofrom emp,deptwhere emp.deptno=dept.deptno and emp.dept=10

标题

在这里插入图片描述
以上这是笛卡尔积
实际上不需要这么多只需要加上过滤条件即可
在这里插入图片描述
3天学完Mysql
在这里插入图片描述
在这里插入图片描述

p45 自连接—12.15结束

3天学完Mysql
3天学完Mysql
在这里插入图片描述

p46 多行子查询

在这里插入图片描述

单行子查询案例

3天学完Mysql
在这里插入图片描述

多行子查询案例

3天学完Mysql
在这里插入图片描述
在这里插入图片描述

最终
在这里插入图片描述

p47 子查询临时表

作用:将子查询当作临时表使用实际并不存在

子查询临时表案例:查各类别中价格最高的商品

在这里插入图片描述
3天学完Mysql
最终答案
在这里插入图片描述

p48 all和any

all

在这里插入图片描述

在这里插入图片描述

any

在这里插入图片描述

在这里插入图片描述

p49 多列子查询

案例1

3天学完Mysql
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

案例2

3天学完Mysql
下面为student表
在这里插入图片描述
在这里插入图片描述

p50 子查询练习——重要

例1

在这里插入图片描述

在这里插入图片描述

例2

先做一个临时表
3天学完Mysql
3天学完Mysql
然后进行多表查询
在这里插入图片描述
3天学完Mysql

例3——较难

3天学完Mysql
在这里插入图片描述
在这里插入图片描述
或者
在这里插入图片描述
但是
在这里插入图片描述

重点
3天学完Mysql
否则就需要写成:表名.列名

p51 表复制和去重

表复制=自我复制=蠕虫复制

3天学完Mysql

在这里插入图片描述
此步:查看要复制的表
在这里插入图片描述
3天学完Mysql
因为自我复制的前提是要自我复制的表中有数据
所以才有第一步将emp表查到的数据先插入到my_tab01中
3天学完Mysql

表去重=删除表中的重复记录

3天学完Mysql

1create table my_tab02 like emp;#把emp表的结构(列)复制到my_tab02中2insert into my_tab02 select * from emp;#将emp表的拆线呢结果插入到my_tab02表中#自我复制insert into my_tab02 select * from my_tab02;#my_tab02表的自我复制

在这里插入图片描述

create table my_tmp like my_tab02;insert into my_tmp #后面不用加fromselect distinct * from my_tab02;delete from my_tab02;#删除my_tab02的记录但是my_tab02表的结构还在insert into my_tab02 fromselect * from my_tmp;drop table my_tmp;

在这里插入图片描述
在这里插入图片描述
3天学完Mysql
在这里插入图片描述

p52 合并查询 union 和 union all

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
要将上述两条语句合并

法一union all:将两个查询结果合并但是不去重

在这里插入图片描述

法二union:将两个查询结果合并且自动去重

在这里插入图片描述

union和union all的使用时间:需要将两个查询结果合并时但是where语句中不方便写的时候可以使用合并处理

p53 外连接需求

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

p54 左外连接右外连接

3天学完Mysql
学生表
3天学完Mysql
3天学完Mysql
考试成绩表
3天学完Mysql
3天学完Mysql

左外连接例子

3天学完Mysql
未使用外连接时
在这里插入图片描述
在这里插入图片描述
使用左外连接
在这里插入图片描述
所以左外连接是左侧表完全显示就算没有与右侧匹配的也显示

右外连接例子

3天学完Mysql
在这里插入图片描述

外连接练习题

在这里插入图片描述
在这里插入图片描述
左连接就是:左表若没有匹配的也显示出来
右连接同理

小结

3天学完Mysql
如:3天学完Mysql

约束简介——2021.12.16开始1

3天学完Mysql

p55 主键

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

主键的细节

在这里插入图片描述
1
主键虽然没有写not null但是默认包含非空
在这里插入图片描述
2
在这里插入图片描述
复合主键
在这里插入图片描述
在这里插入图片描述
3
在这里插入图片描述
4
在这里插入图片描述
3天学完Mysql

p56 not null+unique

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

unique细节

3天学完Mysql
1
在这里插入图片描述
3天学完Mysql

2
在这里插入图片描述

p57 外键简介

3天学完Mysql
在这里插入图片描述

p58 外键使用细节

在这里插入图片描述
外键所在表=从表
先创建主表因为我即外键所在表要用到别人即主表
所以先创建主表
在这里插入图片描述
创建主从表
在这里插入图片描述
测试案例
在这里插入图片描述

小细节

1
3天学完Mysql

在这里插入图片描述
2
即存储引擎为innodb
3天学完Mysql
3
3天学完Mysql
3天学完Mysql

4
3天学完Mysql
其中只要主表定义id时不是
id int not null
那么从表的class_id就可以为null
在这里插入图片描述
5
3天学完Mysql
若没有外键指向它就可以删
除非先把指向它的一行先删除了才能删除这一行
同理若两行指向它先删除这两行才行
p57有讲

p59 check——2021.12.16结束1

可以写但是不会生效
在这里插入图片描述

p60 商店表设计

p61 自增长

p62 索引优化速度——2021.12.16开始2

索引简介

3天学完Mysql
3天学完Mysql

创建索引体验

3天学完Mysql
创建索引
在这里插入图片描述
在这里插入图片描述

举例说明创建一列的索引是没有啥大用的

3天学完Mysql
未创建ename索引前查询
**在这里插入图片描述**
创建ename索引后查询
在这里插入图片描述

但是索引占磁盘空间且只对建立的索引列有效

p63 索引机制

在这里插入图片描述

索引原理

在这里插入图片描述
在某列建立索引就会建立一个索引二叉树
在这里插入图片描述
3天学完Mysql
对dml效率有影响的原因
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
某大V有1000w粉丝,每天发2篇文章
则增删改为2
而1000w粉丝查询为2*1000w
所以select比insert delete update多得多

p64 创建索引

在这里插入图片描述

主键索引 简介

3天学完Mysql
引例

create table t1(id int primary key,name varchar(32));

唯一索引 简介

3天学完Mysql
引例

create table t1(id int unique,name varchar(32));

普通索引—用的最多 简介

因为有一列name
其中这一列有两个tom
所以这时候希望name列为索引有希望name列中可以有重复
则设置name列为index

全文索引 简介

某篇文章中想查电影希望搜索很快
在整篇文章上建立全文索引
3天学完Mysql

在这里插入图片描述
3天学完Mysql

正式开始讲索引的各个操作

1先创建一个表
3天学完Mysql

2查询创建的表有没有索引
在这里插入图片描述
3添加唯一索引
在这里插入图片描述
4添加普通索引方式1
3天学完Mysql
5唯一索引VS普通索引
3天学完Mysql
即id不重复所以使用unique索引更快与普通索引
而如name可能重复所以使用普通索引
6添加普通索引方式2
3天学完Mysql
7添加主键索引
建表时添加
3天学完Mysql
先创建表再添加
3天学完Mysql

p65 删除索引

删除普通索引和唯一索引
在这里插入图片描述
删除主键索引
因为一张表最多只有一个主键
所以不用指定主键是哪一列
在这里插入图片描述

补:修改索引

3天学完Mysql

补:查询索引

在这里插入图片描述

索引增删改查作业

在这里插入图片描述
3天学完Mysql

p66 创建索引规则----2021.12.16 结束2

在这里插入图片描述

p67 事务有什么用——2021.12.16 开始3

3天学完Mysql

事务定义

下图dml不包括查select
3天学完Mysql
回顾一下update用法
在这里插入图片描述
事实上用之前的方法有风险
在这里插入图片描述
在这里插入图片描述
——————————————————————————————
前提是开始事务且有相关的保存点
在这里插入图片描述

p68 事务操作

在这里插入图片描述

在这里插入图片描述

事务操作举例

-- 1. 创建一张测试表CREATE TABLE t27( id INT,  `name` VARCHAR(32));-- 2. 开始事务START TRANSACTION -- 3. 设置保存点SAVEPOINT a-- 执行dml 操作INSERT INTO t27 VALUES(100, 'tom');SELECT * FROM t27;SAVEPOINT b-- 执行dml操作INSERT INTO t27 VALUES(200, 'jack');-- 回退到 bROLLBACK TO b-- 继续回退 aROLLBACK TO a-- 如果这样, 表示直接回退到事务开始的状态.ROLLBACK COMMIT

p69 事务注意事项——2021.12.16 结束3

– 讨论 事务细节
– 1. 如果不开始事务,默认情况下,dml操作是自动提交的即自动commit,不能回滚

INSERT INTO t27 VALUES(300, 'milan'); -- 自动提交 commitSELECT * FROM t27-- 若开启事务后rollback -- 则表中没有任何数据

– 2. 如果开始一个事务,你没有创建保存点. 你可以执行 rollback,
– 默认就是回退到你事务开始的状态

START TRANSACTION #开启事务时就给了你默认保存点即开始的保存点INSERT INTO t27 VALUES(400, 'king');INSERT INTO t27 VALUES(500, 'scott');ROLLBACK -- 表示直接回退到事务开始的的状态即只有300 milan了COMMIT;

– 3. 你也可以在这个事务中(还没有提交时), 创建多个保存点.比如: savepoint aaa;
– 执行 dml , savepoint bbb

– 4. 你可以在事务没有提交前,选择回退到哪个保存点
– 5. InnoDB 存储引擎支持事务 , MyISAM 不支持
innodb存储引擎支持事务 myisam不支持事务

– 6. 开始一个事务 start transaction, 也可以用: set autocommit=off;