Java Web开发_MySQL_事务&索引(Day8)

目录

系列文章

前言

一、事务

事务控制

四大特性(ACID)

二、索引

结构

小结


系列文章

Java Web开发(Day1)

Java Web开发(Day2)

Java Web开发_异步处理以及前端中Vue框架的简单使用(Day3)

Java Web开发_Maven以及SpringBootWeb入门(Day4)

Java Web开发_请求响应与分层解耦(Day5)

Java Web开发_数据库_MySQL(Day6)

Java Web开发_MySQL_DQL_多表设计(Day7)

Java Web开发_MySQL_多表查询(Day8)

前言

此博客主要记录在学习黑马程序员2023版JavaWeb开发课程的一些笔记,方便总结以及复习。

一、事务

在删除一张表的一部分数据时,如果另一张表的内容与这部分数据有关联,那么也要一并删除掉,但是在删除的过程中,如果部分代码出问题了,导致只执行了上半部分,那么数据就会出现错误不匹配的情况。比如说学工部整个部门解散了,该部门及部门下员工都需要删除。

实例操作如下:

-- 删除部门
delete from tb_dept where id = 2;

-- 删除部门下的员工
delete from tb_emp where dept_id = 2;

此时,如果下面那行代码中的dept_id = 2写成了dept_id == 2,这样就会导致删除部门成功了,但是删除该部门下的员工时失败了,就造成了数据的不一致。要想解决这个问题呢,就需要引用到事务来解决。

事务:一组操作的集合,它是一个不可分割的工作单位。事务会把所有的操作作为一个整体一起向系统提交或撤销操作请求,即这些操作 要么同时成功,要么同时失败

MySQL的默认中,事务是自动提交的,也就是说,当执行一条DML语句,MySQL会立即隐式的提交事务。所以我们刚刚的代码里面其实每一行就是一个事务。那我们现在想要将上面两行代码打包成一个事务,就涉及到了事务控制。

事务控制

  • 开启事务:start transaction;  /  begin ;
  • 提交事务:commit;
  • 回滚事务:rollback;

先开启事务,再把需要执行的语句运行,如果没什么问题成功完成了,那我们就可以提交事务,如果其中有一步失败了,那么我们也可以回滚事务把数据恢复成原本的样子。

实操代码如下:

-- ==================================== 事务 ===========================
-- 开启事务
start transaction ;

-- 删除部门
delete from tb_dept where id = 2;

-- 删除部门下的员工
delete from tb_emp where dept_id = 2;


-- 提交事务
commit;

-- 回滚事务
rollback ;


select * from tb_dept;
select * from tb_emp;

四大特性(ACID)

1、原子性(Atomicity):事务是不可分割的最小单元,要么全部成功,要么全部失。

2、一致性(Consistency):事务完成时,必须使所有的数据都保持一致状态。

3、隔离性(Isolation):数据库系统提供的隔离机制,保证事务在不受外部并发操作影响的独立环境下运行。

4、持久性(Durability):事务一旦提交或回滚,它对数据库中的数据的改变就是永久的。

二、索引

索引:帮助数据库 高效获取数据 的 数据结构

  • 优点:提高数据查询的效率,降低数据库的IO成本;通过索引列对数据进行排序,降低数据排序的成本,降低CPU消耗。
  • 缺点:索引会占用存储空间。索引大大提高了查询效率,同时却也降低了insertupdatedelete的效率。由于每次进行增删改的操作的时候,不仅要对表进行一个修改,同时还需要对索引进行一个修改。

结构

MySQL数据库支持的索引结构有很多,如:Hash索引、B+Tree索引、Full-Text索引等。我们平常所说的索引,如果没有特别指明,都是指默认的 B+Tree 结构组织的索引。

B+Tree(多路平衡搜索树)

  • 每一个节点,可以存储多个key(有nkey,就有n个指针)。
  • 所有的数据都存储在叶子节点,非叶子节点仅用于索引数据。
  • 叶子节点形成了一颗双向链表,便于数据的排序及区间范围查询。

创建索引

create  [ unique ]  index 索引名 on  表名 (字段名,... ) ;

查看索引

show  index  from  表名;

删除索引

drop  index  索引名  on  表名;

实例操作如下:

-- 创建 : 为tb_emp表的name字段建立一个索引 .
create index idx_emp_name on tb_emp(name);

-- 查询 : 查询 tb_emp 表的索引信息 .
show index from tb_emp;

-- 删除: 删除 tb_emp 表中name字段的索引 .
drop index idx_emp_name on tb_emp;

在创造索引的时候,他不仅仅是为字段名建造一个索引,他还会同时为主键和表中设为unique(唯一)的值做一个索引(如下图所示)。

小结

事务也可以认为相当于一个控制台。主键字段,在建表时,会自动创建主键索引,同时,主键索引的性能还是最高的。添加唯一约束时,数据库实际上会添加唯一索引。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值