MySQL-事务、索引-2021/09/17

1.事务

为什么要有事务????

事务广泛的运用于订单系统、银行系统等多种场景
例如:A用户和B用户是银行的储户,现在A要给B转账500元,那么需要做以下几件事:

  1. 检查A的账户余额>500元;
  2. A 账户中扣除500元;
  3. B 账户中增加500元;

正常的流程走下来,A账户扣了500,B账户加了500,皆大欢喜。那如果A账户扣了钱之后,系统出故障了呢?A白白损失了500,而B也没有收到本该属于他的500。以上的案例中,隐藏着一个前提条件:A扣钱和B加钱,要么同时成功,要么同时失败。事务的需求就在于此

所谓事务,它是一个操作序列,这些操作要么都执行,要么都不执行,它是一个不可分割的工作单位。

例如,银行转帐工作:从一个帐号扣款并使另一个帐号增款,这两个操作要么都执行,要么都不执行。所以,应该把他们看成一个事务。事务是数据库维护数据一致性的单位在每个事务结束时,都能保持数据一致性

事务命令
要求:表的引擎类型必须是innodb类型才可以使用事务,这是mysql表的默认引擎查看表的创建语句,可以看到engine=innodb
show create table students;
修改数据的命令会触发事务,包括insert、update、delete

开启事务,命令如下:
开启事务后执行修改命令,变更维护到本地缓存中,而不维护物理表中 begin;

提交事务,命令如下 :
将缓存中的数据变更维护到物理表中 commit;

回滚事务,命令如下: 放弃缓存中变更的数据 rollback;

2. 索引

思考:在图书馆中是如何找到一本书的?
一般的应用系统对比数据库的读写比例在10:1左右,而且插入操作和更新操作很少出现性能问题,遇到最多的,也是最容易出问题的,还是一些复杂的查询操作,所以查询语句的优化显然是重中之重当数据库中数据量很大时,查找数据会变得很慢

优化方案:索引

语法

记录时间

开启时间检测

set profiling=1;

查看执行时间

show profiling;

查看索引

show index from 表名;

创建索引

  1. 方式一:建表时创建索引

create_index 对类型primary key(主键)、unique(唯一)都会自动创建索引,要想指定字段创建索引,则在生成表的时候用以下语法

key(指定字段)
create table create_index(
id int primary key,
name varchar(10) unique,
age int,
key (age)
);
  1. 方式二:对于已经存在的表,添加索引
    如果指定字段是字符串,需要指定长度,建议长度与定义字段时长度一致
    字段类型如果不是字符串,可以不填写长度部分
create index 索引名称 on 表名(字段名称(长度))

例:

create index age_index on create_index(age);
create index name_index on create_index(name(10));

删除索引:

drop index 索引名称 on 表名;

缺点
虽然索引大大提高了查询速度,同时却会降低更新表的速度,如对表进行INSERT、UPDATE和DELETE,因为更新表时,MySQL不仅要保存数据,还要保存一下索引文件但是,在互联网应用中,查询的语句远远大于增删改的语句,甚至可以占到80%~90%,所以也不要太在意,只是在大数据导入时,可以先删除索引,再批量插入数据,最后再添加索引

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值