目录
系列文章
Java Web开发_异步处理以及前端中Vue框架的简单使用(Day3)
Java Web开发_Maven以及SpringBootWeb入门(Day4)
Java Web开发_MySQL_DQL_多表设计(Day7)
前言
此博客主要记录在学习黑马程序员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消耗。
- 缺点:索引会占用存储空间。索引大大提高了查询效率,同时却也降低了insert、update、delete的效率。由于每次进行增删改的操作的时候,不仅要对表进行一个修改,同时还需要对索引进行一个修改。
结构
MySQL数据库支持的索引结构有很多,如:Hash索引、B+Tree索引、Full-Text索引等。我们平常所说的索引,如果没有特别指明,都是指默认的 B+Tree 结构组织的索引。
B+Tree(多路平衡搜索树)
- 每一个节点,可以存储多个key(有n个key,就有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(唯一)的值做一个索引(如下图所示)。
小结
事务也可以认为相当于一个控制台。主键字段,在建表时,会自动创建主键索引,同时,主键索引的性能还是最高的。添加唯一约束时,数据库实际上会添加唯一索引。