一、事务
1.1 介绍
在实际的业务开发中,有些业务操作要多次访问数据库。一个业务要发送多条SQL语句给数据库执行。需要将多次访问数据库的操作视为一个整体来执行,要么所有的SQL语句全部执行成功。如果其中有一条SQL语句失败,就进行事务的回滚,所有的SQL语句全部执行失败。
简而言之:事务是一组操作的集合,它是一个不可分割的工作单位。事务会把所有的操作作为一个整体一起向系统提交或撤销操作请求,即这些操作要么同时成功,要么同时失败。
事务作用:保证在一个事务中多次操作数据库表中数据时,要么全都成功,要么全都失败。
1.2 操作
MYSQL中有两种方式进行事务的操作:
-
自动提交事务:即执行一条sql语句提交一次事务。(默认MySQL的事务是自动提交)
-
手动提交事务:先开启,再提交
事务操作有关的SQL语句:
SQL语句 | 描述 |
---|---|
start transaction; / begin ; | 开启手动控制事务 |
commit; | 提交事务 |
rollback; | 回滚事务 |
手动提交事务使用步骤:
-
第1种情况:开启事务 => 执行SQL语句 => 成功 => 提交事务
-
第2种情况:开启事务 => 执行SQL语句 => 失败 => 回滚事务
1.3 四大特性
事务的四大特性简称为:ACID
-
原子性(Atomicity) :原子性是指事务包装的一组sql是一个不可分割的工作单元,事务中的操作要么全部成功,要么全部失败。
-
一致性(Consistency):一个事务完成之后数据都必须处于一致性状态。
如果事务成功的完成,那么数据库的所有变化将生效。
如果事务执行出现错误,那么数据库的所有变化将会被回滚(撤销),返回到原始状态。
-
隔离性(Isolation):多个用户并发的访问数据库时,一个用户的事务不能被其他用户的事务干扰,多个并发的事务之间要相互隔离。
一个事务的成功或者失败对于其他的事务是没有影响。
-
持久性(Durability):一个事务一旦被提交或回滚,它对数据库的改变将是永久性的,哪怕数据库发生异常,重启之后数据亦然存在。
二、索引
2.1 介绍
索引(index):是帮助数据库高效获取数据的数据结构 。
优点:
-
提高数据查询的效率,降低数据库的IO成本。
-
通过索引列对数据进行排序,降低数据排序的成本,降低CPU消耗。
缺点:
-
索引会占用存储空间。
-
索引大大提高了查询效率,同时却也降低了insert、update、delete的效率。
2.2 结构
MySQL数据库支持的索引结构有很多,如:Hash索引、B+Tree索引、Full-Text索引等。
我们平常所说的索引,如果没有特别指明,都是指默认的 B+Tree 结构组织的索引。
B+Tree(多路平衡搜索树)结构:
B+Tree结构:
-
每一个节点,可以存储多个key(有n个key,就有n个指针)
-
节点分为:叶子节点、非叶子节点
-
叶子节点,就是最后一层子节点,所有的数据都存储在叶子节点上
-
非叶子节点,不是树结构最下面的节点,用于索引数据,存储的的是:key+指针
-
-
为了提高范围查询效率,叶子节点形成了一个双向链表,便于数据的排序及区间范围查询
2.3 语法
创建索引
create [ unique ] index 索引名 on 表名 (字段名,... ) ;
查看索引
show index from 表名;
删除索引
drop index 索引名 on 表名;
注意事项:
主键字段,在建表时,会自动创建主键索引
添加唯一约束时,数据库实际上会添加唯一索引