索引

定义: 索引是用来提升查询效率的一种数据结构。

  • 为什么要用索引?
    因为无索引查询时,是以遍历的方式查询以类似于数组形式存储在硬盘上的数据,这种查询的时间复杂复杂度是O(n),所以当数据很多时,查询效率就会变得很慢。因此通过建立索引,提高时间复杂度为O(log(n)),从而提升查询效率。
索引的基本代码实现
  • 在创建表时创建索引:
Create table students(
name varchar(200),
INDEX idx_name(name)//以name字段为key建立一个搜索树,提升查询效率
);
//当索引建立后,MySQL内部就会选择合适的索引进行查询,从而提升效率
select XX from students where name = 'XXX';

索引是一种数据结构,所以需要额外存储的,而且,索引中的key必须和一个或者多个字段关联。

  • 在已经建好的表中添加索引
alter table students add INDEX idx_name(name);
  • 查询表中是否有索引
show INDEX from students;

事务

定义:通常的一个业务就需要多条SQL语句去完成,这多条SQL语句就是完成这一业务的一组语句。

  • 为什么要使用事务?
    举个栗子,以发红包为例,甲给乙发红包,甲已经发出去,钱已经减少了,这时候,存钱的数据库服务器死机等等的突发事件会导致一组SQL语句只执行了一半,乙并没有收到甲发的红包,那么甲少的钱会凭空消失吗?而事务,就恰好解决了这个问题。引进事务后,要么这组SQL语句全部执行成功,要么全部执行失败,也就是达到了一种同生共死的状态。
事务的基本代码实现
  • BEGIN;//明确自己要开始一个事务,即要开始执行一组SQL语句 正常情况下,你的SQL语句会全部执行成功,但如果遇到意外情况,你的SQL语句只执行了一半,此时你不能控制的情况下,系统会自动回滚,当然如果此时你还能控制,可以使用RollBack;进行手动回滚。
  • COMMIT;所有的SQL语句执行结束后进行提交。

事务总结:一次事务由BEGIN开始,由ROOLBACK或者COMMIT结束