浅谈MySql数据库中的索引及事务

索引

概念

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

作用

  • 数据库中的表,数据,索引之间的关系,类似于书架上的图书,书籍内容和书籍目录的关系;
  • 而索引的作用就相当于书籍目录,可以用于快速定位,检索数据;
  • 索引对于提高数据库的性能有很大的帮助。

使用场景

由于可以对数据库中表的一列或多列创建索引,所以我们需要考虑以下几点:

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

满足以上条件时,可以考虑对表中的这些字段创建索引,以提高查询效率。
反之,如果非条件查询列,或经常做插入,修改操作,或磁盘空间不足时,不考虑创建索引。

索引的使用

创建主键约束(PRIMARY KEY),唯一约束(UNIQUE),外键约束(FOREIGN KEY)时,会自动创建对应列的索引。

查看索引

show index from 表名;

示例如下:
在这里插入图片描述

创建索引

对于非主键、非唯一约束、非外键的字段,可以创建普通索引

create index 索引名 on 表名(字段名);

示例如下:
在这里插入图片描述

删除索引

drop index 索引名 on 表名;

示例如下:(删除emp表中name字段的索引)
在这里插入图片描述

事务

事务的概念

事务指逻辑上的一组操作,组成这组操作的各个单元,要么全部成功,要么全部失败。 在不同的环境中,都可以有事务。对应在数据库中,就是数据库事务。

为什么要使用事务

我们就拿个最经典的例子来进行讲解吧:转账
准备测试表

drop table if exists account;
create table account(
id int primary key auto_increment;
name varchar(20)comment '账户名称',
money decimal(11,2)comment '金额'
)
insert into account(name,money)values('银行',6000),('小偷',1000);

假若小偷从银行偷了1000元,则:

--银行账户减少1000元
update account set money=money-1000 where name='银行';
--小偷账户增加1000元
update account set money=money+1000 where name='小偷'

此时,我们需要考虑的是,假若在执行上面第一句SQL语句后,出现了网络错误,或是数据库挂掉了等种种因素,那么银行的账户会减少1000元,但是小偷的账户上却没有增加的金额。
解决方案:

使用事务来控制,保证以上两句SQL要么全部执行成功,要么全部执行失败。

事务的使用

  1. 开启事务: start transaction;
  2. 执行多条SQL语句
  3. 回滚或提交: rollback/commit。

说明:rollback即是全部失败,commit即是全部成功。

示例如下:

start transaction;
--银行账户少1000元
update account set money=money-1000 where name='银行';
--小偷账户增加1000元
update account set money=money+1000 where name='小偷';
commit;

事务的特性

在这里插入图片描述

  • 原子性说的是数据要么一起成功,要么一起失败,即事务提交(commit)和事务回滚(rollback)。
  • 事务在执行前数据库的数据与执行后数据库的数据要保持一致。也就是说一个事务执行之前和执行之后数据必须处于一致性状态。
  • 多个用户并发访问操作数据库时,一个用户的事务操作不能被其它的用户事务所干扰,也就是多个并发事务之间操作是隔离的。
  • 持久性是指一个事务一旦提交成功,那么对数据库的数据的修改是永久性的。就算数据库出现故障或关机,数据也是永久保存下来的。

总结

  • 索引:
    (1)对于插入、删除数据频率高的表,不适用索引
    (2)对于某列修改频率高的,该列不适用索引
    (3)通过某列或某几列的条件查询频率高的,可以对这些列创建索引
  • 事务
start transaction;
...
rollback/commit;

在这里插入图片描述

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值