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是内存数据库

3天学完Mysql_第1张图片
3天学完Mysql_第2张图片

p4 安装Navicat

show databases;
3天学完Mysql_第3张图片
use mysql;
在这里插入图片描述
show tables;
3天学完Mysql_第4张图片

p5 安装SQLyog

SQLyog的各个版本的下载链接

https://github.com/webyog/sqlyog-community/wiki/Downloads
3天学完Mysql_第5张图片

p6 Mysql三层结构

Mysql的端口号

3天学完Mysql_第6张图片

三层结构:数据库管理系统——>数据库——>表
3天学完Mysql_第7张图片
3天学完Mysql_第8张图片
mysqld这个程序在3306这个端口监听
是DBMS中最重要的一个程序之一
mysqld是dbms核心的监听程序
3天学完Mysql_第9张图片
3天学完Mysql_第10张图片
3天学完Mysql_第11张图片
3天学完Mysql_第12张图片
3天学完Mysql_第13张图片
上图中,等服务器端查询到之后再返回给客户端数据

p7 java操作Mysql

p8 创建数据库

3天学完Mysql_第14张图片

创建普通的数据库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
3天学完Mysql_第15张图片
3天学完Mysql_第16张图片
db03
3天学完Mysql_第17张图片
3天学完Mysql_第18张图片
3天学完Mysql_第19张图片

p9 查看 删除 数据库

3天学完Mysql_第20张图片

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

show databases#有s

3天学完Mysql_第21张图片

显示数据库创建语句

show create database `db03`

3天学完Mysql_第22张图片
在创建数据库/表的时候为了规避关键字可以使用反引号`来解决
eg:create database create 会报错
在create上增加反引号即可解决

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

删除数据库

drop database db03

p10备份恢复数据库

看视频效果更好

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

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

mysqldump命令在mysql安装目录的bin目录下
3天学完Mysql_第23张图片
3天学完Mysql_第24张图片

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

source 文件名.sql

进入Mysql命令行 如果不执行mysql -u root -p进入mysql命令行的话只能备份,不能恢复
3天学完Mysql_第25张图片
使用mysql -u root -p进入mysql命令行后即有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

3天学完Mysql_第26张图片

p11创建表

3天学完Mysql_第27张图片
3天学完Mysql_第28张图片

p12 Mysql列类型即数据类型

3天学完Mysql_第29张图片3天学完Mysql_第30张图片
3天学完Mysql_第31张图片
标红表示用得较多
3天学完Mysql_第32张图片
3天学完Mysql_第33张图片

p13 整型

3天学完Mysql_第34张图片
在这里插入图片描述
3天学完Mysql_第35张图片

p14 bit

3天学完Mysql_第36张图片
3天学完Mysql_第37张图片

p15 小数型

3天学完Mysql_第38张图片
3天学完Mysql_第39张图片
3天学完Mysql_第40张图片

p16 字符串1(char varchar)

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

3天学完Mysql_第41张图片
3天学完Mysql_第42张图片

p17 字符串2-使用的细节

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

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

3天学完Mysql_第43张图片
3天学完Mysql_第44张图片
3天学完Mysql_第45张图片
3天学完Mysql_第46张图片
3天学完Mysql_第47张图片

定长与变长

varchar相当于一个可伸缩的盒子
存放文章一般用varchar
3天学完Mysql_第48张图片

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

如果数据就是定长的就是固定的大小就用char
所以查询速度比varchar更快
3天学完Mysql_第49张图片

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

3天学完Mysql_第50张图片
注意text不能带有默认值
如content text
而不是content text(10)

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

3天学完Mysql_第51张图片

p18 日期类型

如果需要某列的属性为timestamp能够自动更新还需要配置如下黄色语句
3天学完Mysql_第52张图片
3天学完Mysql_第53张图片

p19 创建表练习

3天学完Mysql_第54张图片
hsp写的
3天学完Mysql_第55张图片

p20 修改表——重要

3天学完Mysql_第56张图片
3天学完Mysql_第57张图片

1 在表中增加一列

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

3天学完Mysql_第58张图片

2 修改表中的某一列![

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

3天学完Mysql_第59张图片

3 删除表中某一列

alter table 表名如emp
	drop 列名如sex列

3天学完Mysql_第60张图片

4 修改表名

rename table 原表名emp to 新表名employ

3天学完Mysql_第61张图片

5 修改表的字符集

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

3天学完Mysql_第62张图片

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

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

3天学完Mysql_第63张图片

p21insert基本使用

3天学完Mysql_第64张图片
3天学完Mysql_第65张图片
3天学完Mysql_第66张图片

3天学完Mysql_第67张图片

p22 insert注意事项

以goods表为例
在这里插入图片描述

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

3天学完Mysql_第68张图片

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

3天学完Mysql_第69张图片

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

3天学完Mysql_第70张图片

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

3天学完Mysql_第71张图片

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

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

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

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

3天学完Mysql_第73张图片

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

在这里插入图片描述

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

3天学完Mysql_第74张图片

指定某列的默认值

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

p23 update语句

3天学完Mysql_第77张图片

在这里插入图片描述
在这里插入图片描述
3天学完Mysql_第78张图片
在这里插入图片描述

p24 delete语句

3天学完Mysql_第79张图片
3天学完Mysql_第80张图片
3天学完Mysql_第81张图片
3天学完Mysql_第82张图片

删除表中记录

delete from 表名:只能删除所有记录但是表还在
3天学完Mysql_第83张图片

删除整个表

要删除整个表:drop table 表名
表没有了里面的记录也自然没有了
在这里插入图片描述

p25 select语句1

3天学完Mysql_第84张图片
3天学完Mysql_第85张图片
3天学完Mysql_第86张图片
3天学完Mysql_第87张图片

p26 select语句2

3天学完Mysql_第88张图片
3天学完Mysql_第89张图片

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

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

列取别名

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

3天学完Mysql_第90张图片

p27 select语句3

where子句中的运算符

3天学完Mysql_第91张图片
3天学完Mysql_第92张图片
3天学完Mysql_第93张图片
3天学完Mysql_第94张图片
3天学完Mysql_第95张图片
3天学完Mysql_第96张图片

3天学完Mysql_第97张图片
3
在这里插入图片描述
4
3天学完Mysql_第98张图片

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

3天学完Mysql_第99张图片
1
在这里插入图片描述
2
在这里插入图片描述
3我写的
3天学完Mysql_第100张图片
3hsp写的
3天学完Mysql_第101张图片

p29 统计/合记函数

count函数:返回行的总数

3天学完Mysql_第102张图片
统计班级共多少学生
就用select count(*) from student
就返回student这个表中所有的行数即学生个数

3天学完Mysql_第103张图片

count(*)和count(列)

上述第一条写成这样则
在这里插入图片描述
3天学完Mysql_第104张图片
3天学完Mysql_第105张图片
3天学完Mysql_第106张图片

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

3天学完Mysql_第107张图片
3天学完Mysql_第108张图片
在这里插入图片描述
3天学完Mysql_第109张图片
在这里插入图片描述
在这里插入图片描述

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

在这里插入图片描述
3天学完Mysql_第110张图片

MAX/MIN函数

3天学完Mysql_第111张图片
3天学完Mysql_第112张图片
想知道总分最高和最低是谁:要用到子查询

3天学完Mysql_第113张图片

p30 分组统计

3天学完Mysql_第114张图片
3天学完Mysql_第115张图片
1
3天学完Mysql_第116张图片
没有group by则是求得整个表得最高薪水
3天学完Mysql_第117张图片
在这里插入图片描述
两位小数
3天学完Mysql_第118张图片

2
3天学完Mysql_第119张图片
3天学完Mysql_第120张图片
3
3.1
在这里插入图片描述
3天学完Mysql_第121张图片
3天学完Mysql_第122张图片
3.2
3天学完Mysql_第123张图片

3天学完Mysql_第124张图片

p31 字符串函数

3天学完Mysql_第125张图片

p32字符串函数练习

p33 数学函数

p34 日期函数1

p35 日期函数2

p36 日期函数3

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

3天学完Mysql_第126张图片

查询当前用户

select user()select user() from dual

3天学完Mysql_第127张图片

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

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

3天学完Mysql_第128张图片

MD5加密

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

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

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

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

演示案例
3天学完Mysql_第129张图片

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

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

3天学完Mysql_第130张图片

mysql.user表示:数据库.表

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

案例:验证root用户的明文密码为hsp放入数据库中使用的是password()加密
3天学完Mysql_第131张图片
3天学完Mysql_第132张图片

p38 流程控制函数

3天学完Mysql_第133张图片

if(exp1,exp2,exp3)

3天学完Mysql_第134张图片
3天学完Mysql_第135张图片

ifnull(exp1,exp2)

3天学完Mysql_第136张图片
3天学完Mysql_第137张图片

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

select case when exp1 then exp2
			when exp3 then exp4
			when exp5 then exp6
			.
			.
			.
			when expn-2 then expn-1
			else expn end

3天学完Mysql_第138张图片
3天学完Mysql_第139张图片
3天学完Mysql_第140张图片

判断是否为空

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

综合案例

1
在这里插入图片描述

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

2
在这里插入图片描述
3天学完Mysql_第141张图片
3天学完Mysql_第142张图片
3天学完Mysql_第143张图片

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

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

3天学完Mysql_第144张图片
emp表
3天学完Mysql_第145张图片
dept表
3天学完Mysql_第146张图片
salgrade
3天学完Mysql_第147张图片

为什么要将查询加强

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

3天学完Mysql_第149张图片
1
3天学完Mysql_第150张图片
2
3天学完Mysql_第151张图片
3 emp表中没有上级即mgr为null
3天学完Mysql_第152张图片
3天学完Mysql_第153张图片

**4 **
3天学完Mysql_第154张图片
————————————————————————

3天学完Mysql_第155张图片
1
3天学完Mysql_第156张图片

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

p40 分页查询

在这里插入图片描述
题目
在这里插入图片描述
3天学完Mysql_第158张图片
在这里插入图片描述

p41 分组加强

1
3天学完Mysql_第159张图片
2
3天学完Mysql_第160张图片
3天学完Mysql_第161张图片
3天学完Mysql_第162张图片
3
3天学完Mysql_第163张图片
3天学完Mysql_第164张图片
4
3天学完Mysql_第165张图片

p42 多子句查询——很重要

3天学完Mysql_第166张图片
3天学完Mysql_第167张图片

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

emp表
3天学完Mysql_第168张图片
dept表
3天学完Mysql_第169张图片
salgrade表
3天学完Mysql_第170张图片

1

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

p44 多表查询–接着p43继续

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

部门号涉及dept表,后面的三个要查的涉及emp表,所以多表查询
3天学完Mysql_第175张图片

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

标题

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

p45 自连接—12.15结束

在这里插入图片描述
在这里插入图片描述
3天学完Mysql_第180张图片

p46 多行子查询

3天学完Mysql_第181张图片

单行子查询案例

3天学完Mysql_第182张图片
3天学完Mysql_第183张图片

多行子查询案例

在这里插入图片描述
3天学完Mysql_第184张图片
3天学完Mysql_第185张图片

最终
3天学完Mysql_第186张图片

p47 子查询临时表

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

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

3天学完Mysql_第187张图片
在这里插入图片描述
最终答案
3天学完Mysql_第188张图片

p48 all和any

all

3天学完Mysql_第189张图片

3天学完Mysql_第190张图片

any

3天学完Mysql_第191张图片

3天学完Mysql_第192张图片

p49 多列子查询

案例1

在这里插入图片描述
3天学完Mysql_第193张图片
3天学完Mysql_第194张图片
3天学完Mysql_第195张图片

案例2

在这里插入图片描述
下面为student表
3天学完Mysql_第196张图片
3天学完Mysql_第197张图片

p50 子查询练习——重要

例1

3天学完Mysql_第198张图片

3天学完Mysql_第199张图片

例2

先做一个临时表
在这里插入图片描述
3天学完Mysql_第200张图片
然后进行多表查询
3天学完Mysql_第201张图片
3天学完Mysql_第202张图片

例3——较难

在这里插入图片描述
3天学完Mysql_第203张图片
3天学完Mysql_第204张图片
或者
3天学完Mysql_第205张图片
但是
3天学完Mysql_第206张图片

重点
在这里插入图片描述
否则就需要写成:表名.列名

p51 表复制和去重

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

3天学完Mysql_第207张图片

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

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

3天学完Mysql_第210张图片

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表的自我复制

3天学完Mysql_第211张图片

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

3天学完Mysql_第212张图片
3天学完Mysql_第213张图片
3天学完Mysql_第214张图片
3天学完Mysql_第215张图片

p52 合并查询 union 和 union all

3天学完Mysql_第216张图片
3天学完Mysql_第217张图片
3天学完Mysql_第218张图片
要将上述两条语句合并

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

3天学完Mysql_第219张图片

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

3天学完Mysql_第220张图片

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

p53 外连接需求

3天学完Mysql_第221张图片
3天学完Mysql_第222张图片

p54 左外连接右外连接

在这里插入图片描述
学生表
在这里插入图片描述
3天学完Mysql_第223张图片
考试成绩表
在这里插入图片描述
3天学完Mysql_第224张图片

左外连接例子

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

右外连接例子

在这里插入图片描述
3天学完Mysql_第228张图片

外连接练习题

3天学完Mysql_第229张图片
3天学完Mysql_第230张图片
左连接就是:左表若没有匹配的也显示出来
右连接同理

小结

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

约束简介——2021.12.16开始1

3天学完Mysql_第231张图片

p55 主键

3天学完Mysql_第232张图片
3天学完Mysql_第233张图片

主键的细节

3天学完Mysql_第234张图片
1
主键虽然没有写not null但是默认包含非空
3天学完Mysql_第235张图片
2
3天学完Mysql_第236张图片
复合主键
3天学完Mysql_第237张图片
3天学完Mysql_第238张图片
3
3天学完Mysql_第239张图片
4
3天学完Mysql_第240张图片
在这里插入图片描述

p56 not null+unique

3天学完Mysql_第241张图片
3天学完Mysql_第242张图片

unique细节

在这里插入图片描述
1
3天学完Mysql_第243张图片
在这里插入图片描述

2
3天学完Mysql_第244张图片

p57 外键简介

3天学完Mysql_第245张图片
3天学完Mysql_第246张图片

p58 外键使用细节

3天学完Mysql_第247张图片
外键所在表=从表
先创建主表因为我即外键所在表要用到别人即主表
所以先创建主表
3天学完Mysql_第248张图片
创建主从表
3天学完Mysql_第249张图片
测试案例
3天学完Mysql_第250张图片

小细节

1
在这里插入图片描述

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

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

p59 check——2021.12.16结束1

可以写但是不会生效
3天学完Mysql_第253张图片

p60 商店表设计

p61 自增长

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

索引简介

3天学完Mysql_第254张图片
在这里插入图片描述

创建索引体验

在这里插入图片描述
创建索引
3天学完Mysql_第255张图片
3天学完Mysql_第256张图片

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

3天学完Mysql_第257张图片
未创建ename索引前查询
3天学完Mysql_第258张图片
创建ename索引后查询
3天学完Mysql_第259张图片

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

p63 索引机制

3天学完Mysql_第260张图片

索引原理

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

3天学完Mysql_第264张图片
3天学完Mysql_第265张图片
某大V有1000w粉丝,每天发2篇文章
则增删改为2
而1000w粉丝查询为2*1000w
所以select比insert delete update多得多

p64 创建索引

3天学完Mysql_第266张图片

主键索引 简介

在这里插入图片描述
引例

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

唯一索引 简介

在这里插入图片描述
引例

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

普通索引—用的最多 简介

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

全文索引 简介

某篇文章中想查电影希望搜索很快
在整篇文章上建立全文索引
在这里插入图片描述

3天学完Mysql_第267张图片
3天学完Mysql_第268张图片

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

1先创建一个表
在这里插入图片描述

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

p65 删除索引

删除普通索引和唯一索引
3天学完Mysql_第271张图片
删除主键索引
因为一张表最多只有一个主键
所以不用指定主键是哪一列
3天学完Mysql_第272张图片

补:修改索引

在这里插入图片描述

补:查询索引

3天学完Mysql_第273张图片

索引增删改查作业

3天学完Mysql_第274张图片
3天学完Mysql_第275张图片

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

3天学完Mysql_第276张图片

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

3天学完Mysql_第277张图片

事务定义

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

p68 事务操作

3天学完Mysql_第282张图片

事务操作举例

-- 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');

-- 回退到 b
ROLLBACK TO b
-- 继续回退 a
ROLLBACK TO a
-- 如果这样, 表示直接回退到事务开始的状态.
ROLLBACK 
COMMIT

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

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

INSERT INTO t27 VALUES(300, 'milan'); -- 自动提交 commit
SELECT * 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;

你可能感兴趣的:(技术栈,mysql)