[关闭]
@MRsunhuimin 2019-08-07T06:20:55.000000Z 字数 1487 阅读 217

事务、视图、索引(08.07)

MySQL数据库

作者:孙慧敏

1.事务

    事务是由一步或几步数据库操作序列组成逻辑执行单元,这系列操作要么全部执行,要么全部放弃执行。

1.1 事务必须具备以下四个属性

1. 原子性(原子性是指事务是一个不可分割的工作单位,事务中的操作要么都发生要么都不发生。)

2. 一致性(数据的一致性)

3. 隔离性(事务与事务之间相互隔离)

4. 持久性(永久写入硬盘,永久保存)

1.2 事务应用

  1. mysql数据库自动开启了事务提交,所以我们应该先关闭自动提交,改为手动提交
  2. SET AUTOCOMMIT = 0; # 关闭自动提交模式(0关闭1开启)
  3. START TRANSACTION #开启事务
  4. ....sql代码....
  5. COMMIT #提交事务 或 ROLLBACK #事务回滚
  6. SET AUTOCOMMIT = 1;#开启事务提交,以便接下来使用

2.视图

2.1 什么是视图?

    视图是由查询结果形成的一张虚拟表。

2.2 什么时候要用到视图?

    如果某个查询结果出现的非常频繁,也就是,要经常拿这个查询结果来做子查询

2.3 视图的创建语法:

    create view 视图名 as select 语句; 

3.索引

3.1 什么叫数据库索引?

    索引是对数据库中一列或者多列的值进行排序的一种数据结构。

    重点:对列的值进行排序的数据结构。

    使用索引可以快速访问数据库中的记录。

3.2 索引的主要用途是什么?

    执行select语句时候会使用索引,索引主要用来提高查询性能。

    由于索引是经过某种算法优化过的,因而查找次数要少的多。

3.3 不使用索引情况下,sql查询语句是怎么执行的?

    如果没有索引,必须遍历整个表。例如这样一个查询:select * from table1 where id=10000。如果没有索引,必须遍历整个表,直到ID等于10000的这一行被找到为止;有了索引之后(必须是在ID这一列上建立的索引),即可在索引中查找。由于索引是经过某种算法优化过的,因而查找次数要少的多。可见,索引是用来定位的。

3.4 MYSQL索引分类

    1. 主键索引(PRIMARY KEY) 

    2. 唯一索引(UNIQUE) 

    3. 常规索引(INDEX) 

    4. 全文索引(FULLTEXT)
  1. #添加主键索引
  2. ALTER table student add PRIMARY Key(StudentNo);
  3. #添加唯一索引
  4. ALTER table student add UNIQUE(StudentName);
  5. #添加普通索引
  6. ALTER table student add INDEX(IdentityCard);
  7. #全文索引
  8. ALTER table student add FULLTEXT(Phone)
  9. explain select .....可以看到执行效率

3.5 哪些情况需要创建索引?

    1. 主键自动建立唯一索引

    2. 频繁作为查询条件的字段应该创建索引

    3. 查询中与其他表关联的字段,外键关系建立索引

    4. 频繁更新的字段不适合建立索引,因为每次更新不单单是更新了记录还会更新索引

    5. WHERE条件里用不到的字段不创建索引

    6. 单键/组合索引的选择问题,who?(在高并发下倾向创建组合索引)

    7. 查询中排序的字段,排序的字段若通过索引去访问将大大提高排序速度

    8. 查询中统计或者分组字段

3.6哪些情况不要创建索引?

    1. 表记录太少

    2. 经常增删改的表 
    ( 提高了查询速度,同时却会降低更新表的速度,如对表进行INSERT、UPDATE、和 DELETE。 
    因为更新表时,MySQL不仅要保存数据,还要保存一下索引文件。 
    数据重复且分布平均的表字段,因此应该只为最经常查询和最经常排序的数据建立索引。)

    3. 注意,如果某个数据列包含许多重复的内容,为它建立索引就没有太大的实际效果。
添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注