狂人日记day11

本文详细介绍了数据库事务的概念,包括原子性、一致性、隔离性和持久性,并探讨了事务的提交、回滚及其隔离级别。同时,讲解了索引的重要性、创建与删除方法,以及如何分析SQL查询是否使用索引。还提到了视图的作用和数据库设计的三范式,强调了正确使用索引和遵循范式以优化数据库性能。
摘要由CSDN通过智能技术生成

狂人日记day11

事务

业务逻辑

假设从a到b转账1000

a减去1000

b加上1000

完整的业务

要么同时成功 要么同时失败

dml语句

  • insert
  • delete
  • update

要考虑安全问题

多个事务共同完成

  • 提交事务

成功的事务

  • 回滚事务

失败的事务

提交:Transaction

回滚: rollback

回滚只能回到上次提交点

Start transaction;

Rollback;//回滚事务

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-yOJcwwdt-1621656868173)(/Users/suannai/Library/Application Support/typora-user-images/image-20210521145155890.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-3RC9Apjv-1621656868174)(/Users/suannai/Library/Application Support/typora-user-images/image-20210521145228999.png)]

commit//提交事务

事务特性

  • 原子性

    原子最小不能再分

  • 一致性

同时成功,同时失败

  • 隔离性

a与b有一定的隔离

  • 持久性

    事务提交的保障

事务的隔离性

  • 读未提交 read uncommitted

    set global transaction isolation level read uncommitted;

    事务a可以读取到事务b未提交的数据

  • 读已提交 read committed

set global transaction isolation level read committed;

  • 可重复读 repeatable read

set global transaction isolation level repeatable read;

  • 序列化读 serializable

set global transaction isolation level serializable;

查看当前会话隔离级别

SELECT @@tx_isolation

索引

索引在数据库的字段上添加,为了提高查询效率

目的:缩小扫描范围

索引需要排序

mysql 中索引是一个(自平衡二叉树:B-tree)

任何数据库 主键都自动添加索引

任何数据库的任何表的任何记录 在硬盘上都有物理存储编号

主键和unique 都会自动添加索引

条件:

  • 数据庞大
  • 条件经常出现在where后面
  • 改字段很少出现dml操作

不要随意添加索引

创建索引:

create index emp_ename_index on emp(ename);

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-NryURTfG-1621656868175)(/Users/suannai/Library/Application Support/typora-user-images/image-20210522104621361.png)]

给 emp的name 起名 叫 emp_ename_index

删除索引:

drop index emp_ename_index on emp;

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-BgKfxqlE-1621656868175)(/Users/suannai/Library/Application Support/typora-user-images/image-20210522104825844.png)]

查看是否sql是否使用了索引

explain select * from emp where ename = ‘KING’;

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-a5bVZVLW-1621656868175)(/Users/suannai/Library/Application Support/typora-user-images/image-20210522105255900.png)]

扫描14条 说明没使用索引

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-YotZgHIo-1621656868176)(/Users/suannai/Library/Application Support/typora-user-images/image-20210522105304594.png)]

扫描1条,加上了索引

索引的失效:

select * from emp where ename like ‘%T’

即使添加索引也不走索引,因为用%开头了,尽量模糊查询时用%开始

explain select * from emp where ename like ‘%G’;

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-MnMgYiEu-1621656868176)(/Users/suannai/Library/Application Support/typora-user-images/image-20210522105845453.png)]

失效的第二种情况:

使用or的情况 如果or两端都有索引才会走索引

建议 :少用or

explain select * from emp where ename = 'KING ’ or job = ‘MANAGER’;

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-IyQa554i-1621656868177)(/Users/suannai/Library/Application Support/typora-user-images/image-20210522110049845.png)]

失效第三种情况:

使用复合索引时 没有使用左侧的列查找 索引失效

复合索引:

​ 两个字段或者更多字段联合起来添加一个索引,叫做复合索引

create index index_job_sal on emp(job,sal);

explain select * from emp where job =‘MANAGER’

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-QMPwBRmc-1621656868177)(/Users/suannai/Library/Application Support/typora-user-images/image-20210522110348110.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Tohg5grc-1621656868177)(/Users/suannai/Library/Application Support/typora-user-images/image-20210522110426564.png)]

索引失效

第四种情况:

在where中参与了运算,索引失效

create index index_sal on emp(sal);

explain select * from emp where sal = 800;

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-gLLkBCqg-1621656868177)(/Users/suannai/Library/Application Support/typora-user-images/image-20210522110703236.png)]

explain select * from emp where sal +1 =800;

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-zSs2H3HY-1621656868178)(/Users/suannai/Library/Application Support/typora-user-images/image-20210522110631066.png)]

失效的第五种情况:

在where中 索引列使用了函数

explain select * from emp where lower(ename) = ‘jack’;

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Fg0LlR4n-1621656868178)(/Users/suannai/Library/Application Support/typora-user-images/image-20210522110854530.png)]

第六种情况:

类型转换

索引分类

进行优化的重要手段,优化的时候优先考虑的因素就是索引

试图:

站在不同的角度 去看同一份数据

创建视图

create table dept2 as select * from dept;

create view emp_view as select * from dept2;

Drop view emp_view;

只有dql语句才能以view创建

试图作用 :

对试图对象的增删改查,会导致原表被操作

insert into emp_view(deptno,dname,loc) values (60,‘sales’,‘beijing’);

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-cickT5NQ-1621656868179)(/Users/suannai/Library/Application Support/typora-user-images/image-20210522112042242.png)]

实际开发中的作用:

  • 简化sql语句

视图的语句只能dql

但视图创建完成后可以对视图进行增删改查操作

增删改查:crud

DBA 常用命令

重点掌握数据导入导出(数据的备份)

数据导出

在terminal中

alias mysql=/usr/local/mysql/bin/mysqldump - uroot -proot123 bjpowernode >suannai:bjpowernode.sql

可以导出指定的表

alias mysql=/usr/local/mysql/bin/mysqldump - uroot -proot123 bjpowernode emp >suannai:bjpowernode.sql

注意这里面设置了连接 同时解答了 开始mysql启动不了的问题 应该为 目录设置问题 用连接启动

导入先登陆mysql后

Source + 文件

数据库设计三范式

第一范式:

  • 任何一张表必须有主键,每个字段原子性不可再分

第二范式:

  • 所有非主键字段完全依赖主键,不产生部分以来,在第一范式之上

第三范式

  • 非主键字段直接依赖主键,不产生传递依赖,在第二范式之上

作用: 避免空间浪费

第一范式:

核心

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Fw9hPrpb-1621656868179)(/Users/suannai/Library/Application Support/typora-user-images/image-20210522114547125.png)]

第二范式:

建立在第一范式的基础之上

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-JodjJPAw-1621656868179)(/Users/suannai/Library/Application Support/typora-user-images/image-20210522114933519.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-fmTz6OF4-1621656868180)(/Users/suannai/Library/Application Support/typora-user-images/image-20210522115322945.png)]

多对多怎么设计:

​ 多对多 三张表 关键表两个外键

第三范式:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Uh33F7dK-1621656868180)(/Users/suannai/Library/Application Support/typora-user-images/image-20210522115851680.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-VhT8ittY-1621656868180)(/Users/suannai/Library/Application Support/typora-user-images/image-20210522115936300.png)]

一对多,两张表,多的表加外键

一对一 如果表过于庞大 建议拆分表

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-mucjvuTn-1621656868180)(/Users/suannai/Library/Application Support/typora-user-images/image-20210522120725109.png)]

总结:

  • 多对多 三张表 关键表两个外键

  • 一对多,两张表,多的表加外键

  • 一对一 拆分表 外键唯一

实际为了满足客户需求 有时会用冗余换速度

连接次数越多 效率越低

对于开发人员 sql编写难度也会降低

剩下就是作业题
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值