数据库索引和事务理解

本文介绍了数据库中的索引和事务两个重要概念。索引类似于书籍目录,能快速定位数据,提高查询效率,但过多的索引会影响写操作。创建和删除索引的方法也进行了说明。事务则确保一组操作的原子性,保证数据一致性,例如在转账场景中的应用,通过开启事务、提交或回滚来确保操作的成功或失败。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在我学习数据库时,有两个概念是非常重要的,在面试中很有可能被问到:
就是索引和事务的概念。

一、索引
通俗理解一下,我们每本书都有一个目录,通过这个目录我们很快的可以找到自己需要的某一章节,那么在数据库中就有一个索引,索引可以帮我们快速的找到数据的位置,提高数据海量数据的查询效率。

索引概念:索引是一种特殊的文件,包含着对数据表里所有记录的引用指针。可以对表中的一列或多列创建索引,并指定索引的类型,各类索引有各自的数据结构实现。

索引的作用

  1. 数据库中的表、数据、索引之间的关系,类似于书架上的图书、书籍内容和书籍目录的关系。
  2. 索引所起的作用类似书籍目录,可用于快速定位、检索数据。
  3. 索引对于提高数据库的性能有很大的帮助。

-------------------那么索引越多越好吗????
并不是。我们来看一下索引的应用场景:

  1. 数据量较大,且经常对这些列进行条件查询。
  2. 该数据库表的插入操作,及对这些列的修改操作频率较低。
  3. 索引会占用额外的磁盘空间,会额外创建索引信息表。

不适用索引的场景如下:

  1. 对于插入、删除数据频率高的表,不适用索引
  2. 对于某列修改频率高的,该列不适用索引

接下来看一下索引的使用
查看索引

show index from 表名;
例如查看学生表已有的索引:show index from student;

创建索引:(我们在创建主键、外键、唯一键时,都会给 对应的字段添加索引)

create index 索引名 on 表名(字段名);
例如创建班级表中,name字段的索引:create index idx_classes_name on classes(name);

删除索引

drop index 索引名 on 表名;
例如删除班级表中name字段的索引:drop index idx_classes_name on classes

二、事务
事务的概念:事务指逻辑上的一组操作,组成这组操作的各个单元,要么全部成功,要么全部失败。在不同的环境中,都可以有事务。对应在数据库中,就是数据库事务。(其实这个类似于我们所说的原子操作,一个操作要么不做,要么全部做完)
为什么要有事务
比如小明给小红转钱,那么小明的账户上就要少1000,小红的账户上就要多1000,,但是若是中间发生了断点,网络不好的状况,有可能小明账户上的钱少了1000,但是小红账户上却没有多1000,这就造成了麻烦。所以要引出事务概念:
来创建一个表理解一下:

创建表:
create table accout(
id int primary key auto_increment,
name varchar(20) comment '账户名称',
money decimal(11,2) comment '金额'
);

插入数据:
insert into accout(name, money) values
('小明', 5000),
('小红', 1000);

转账操作:
-- 小明账户减少2000
update accout set money=money-2000 where name = '小明';
-- 小红账户增加2000
update accout set money=money+2000 where name = '小红'

(1)在转钱之前开启事务

start transaction;

(2)然后进行转钱操作。
(3)操作完成后,要么提交,要么回滚。
提交事务:(事务提交就证明成功)

commit;

回滚事务:(事务回滚就会失败)

rollback;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值