文章目录
- 1.索引
- 1.1 优缺点
- 1.2 使用
- 2.事务
- 2.1 事务的使用
- 2.2 四大特性
- 2.2.1 原子性
- 2.2.2 隔离性
1.索引
索引是一种特殊的文件,包含着对数据表里所有记录的引用指针。
可以对表中的一列或多列创建索引,并指定索引的类型,各类索引有各自的数据结构实现
1.1 优缺点
优点:
索引所起的作用类似书籍目录,可用于 快速定位、检索数据。
索引对于提高数据库的性能有很大的帮助,加快了查找的速度。
缺点:
- 增加了增删改的开销。(此时进行增删改就需要调整已经创建好的索引)
- 增加了空间的开销。(构造索引,需要额外的硬盘空间来保存。)
操作数据库是无非就是增删改查,在多数场景下,查询的使用概率要比增删改多很多。
因此引入索引还是比较有意的。
1.2 使用
1、查看索引
命令格式:
show index from 表名;
针对学生表来说,虽然前面没有创建过索引,但是他还会自带一个索引。
2、创建索引
如果查询操作很多的时候是按照名字查询的,这个时候就需要根据名字这一列来创建索引了。
下面根据 name 这一列来创建索引。
命令格式 :
create 索引名 on 表名(列名);
创建成功
完成创建后。使用前面的命令来查看索引。
这就是根据 name 这一列创建出来的索引。
3、删除索引
命令格式:
drop 索引名 on 表名;
删除成功
此时查看学生表的索引。
可以看到 name 的索引被删除了。
删除索引 和 创建索引 也是有可能会吃大量的磁盘 IO 也是比较危险的操作!!!
在最开始设计数据库的时候,创建表的时候,就要规划好。
要是已经有大量的数据,此时要进行操作就需要谨慎起来。
2.事务
事务指逻辑上的一组操作,组成这组操作的各个单元,要么全部成功,要么全部失败。
在不同的环境中,都可以有事务。
对应在数据库中,就是数据库事务。
2.1 事务的使用
(1)开启事务
start transaction;
(2)中间执行多条 SQL 语句
(3))回滚或提交:
rollback/commit;
说明:rollback 即是全部失败,commit 即是全部成功。
全部成功 的演示:
全部失败 的演示:
回滚操作是什么,后面详细说明。
2.2 四大特性
- 原子性(事务的初心)
- 一致性:事务执行前和执行后,都要是数据合法的状态。
- 持久性:(持久 >= 硬盘)事务产生的修改,都是会写入硬盘的。
即使是程序重启、主机重启、掉电。事务都是可以正常工作的,保证修改是生效的。 - 隔离性:一个数据库的服务器同时执行多个事务的时候,事务之间的相互影响程度。
2.2.1 原子性
事务是可以把多个 SQL 语句给打包一起的,也就是变成了一个整体。
而有的操作就是需要作为一个整体来完成。
这同时也是事务打包成整体操作 最核心 的特性。
下面以一个例子来详细的说明。
比如张三要给李四转50块钱,这是就涉及到了两个步骤。
- 张三的余额减去50块钱。
- 李四的余额加上50块钱。
再比如网购,这里也涉及到两个步骤
- 商品表的的库存减少一个。
- 顾客的订单加上一个。
上述的这些操作就是要把多个操作给大包成一个整体。
要求,要么全部执行完,要么都不执行。
这里所说的都不执行并不是真正意义上的不执行,而是恢复到执行之前的样子。
这就是 回滚操作。
因为是自动恢复到执行之前的样子,所以看起来就好像没执行一样。
这里涉及到的 回滚操作(rollback),其实就是把执行过的操作给 逆向恢复回去。
类似于电脑上的 Ctry + Z 。
回滚操作的使用:
- 数据库会把每个指向的操作记录下来。
- 如果某个操作出错,就会把事务中前面的操作进行回滚
- 根据之前进行的操作,进行逆操作。(如果前面是插入,现在就是删除)
2.2.2 隔离性
mysql 服务器要同时给多个客户端提供服务。
此时多个客户端之间,可能会同时发起事务,
尤其是这多个事务在操作同一个数据库的同一个表的时候,就很有可能引起一些麻烦
如果隔离性 越高,就意味着事务之间的并发程度 越低 。
执行效率就会 越慢,但是数据的准确性是 越高 的。
如果隔离性 越低 ,就意味着事务之间的并发程度 越高 。
执行效率就会 越快 ,但是数据的准确性是 越低 的。
下面举例说明。
比如有的时候会希望执行的效率慢点,但是准确性一定要高,就像是计算钱的时候。
再比如说,希望指向的效率快点,准确性不要求很高,就像是抖音或者是b站的点赞数。