事务、视图、索引

事务、视图、索引

1.事务

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

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

  • 原子性(原子性是指事务是一个不可分割的工作单位,事务中的操作要么都发生要么都不发生。)
  • 一致性(数据的一致性)
  • 隔离性(事务与事务之间相互隔离)
  • 持久性(永久写入硬盘,永久保存)

事务应用

mysql 复制代码
mysql数据库自动开启了事务提交,所以我们应该先关闭自动提交,改为手动提交
SET AUTOCOMMIT  = 0;    # 关闭自动提交模式(0关闭1开启)
START TRANSACTION #开启事务

....sql代码....


COMMIT #提交事务  或  ROLLBACK #事务回滚

SET AUTOCOMMIT = 1;#开启事务提交,以便接下来使用

2.视图

什么是视图?

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

什么时候要用到视图?

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

视图的创建语法:
create view 视图名 as select 语句;

3.索引

什么叫数据库索引?

索引是对数据库中一列或者多列的值进行排序的一种数据结构。重点:对列的值进行排序的数据结构。使用索引可以快速访问数据库中的记录。

索引的主要用途是什么?

执行select语句时候会使用索引,索引主要用来提高查询性能。由于索引是经过某种算法优化过的,因而查找次数要少的多。

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

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

MYSQL索引分类

主键索引(PRIMARY KEY)

唯一索引(UNIQUE)

常规索引(INDEX)

全文索引(FULLTEXT)

python 复制代码
#添加主键索引
ALTER table student add PRIMARY Key(StudentNo);
#添加唯一索引
ALTER table student add UNIQUE(StudentName);
#添加普通索引
ALTER table student add INDEX(IdentityCard);
#全文索引
ALTER table student add FULLTEXT(Phone)

explain  select .....可以看到执行效率

哪些情况需要创建索引?

  • 主键自动建立唯一索引
  • 频繁作为查询条件的字段应该创建索引
  • 查询中与其他表关联的字段,外键关系建立索引
  • 频繁更新的字段不适合建立索引,因为每次更新不单单是更新了记录还会更新索引
  • WHERE条件里用不到的字段不创建索引
  • 单键/组合 复合索引的选择问题,who?(在高并发下倾向创建组合索引)
  • 查询中排序的字段,排序的字段若通过索引去访问将大大提高排序速度
  • 查询中统计或者分组字段

哪些情况不要创建索引?

  • 表记录太少
  • 经常增删改的表
    ( 提高了查询速度,同时却会降低更新表的速度,如对表进行INSERT、UPDATE、和 DELETE。
    因为更新表时,MySQL不仅要保存数据,还要保存一下索引文件。
    数据重复且分布平均的表字段,因此应该只为最经常查询和最经常排序的数据建立索引。)
  • 注意,如果某个数据列包含许多重复的内容,为它建立索引就没有太大的实际效果。
相关推荐
二十雨辰3 分钟前
[Spring]-认识Spring
java·数据库·spring
zhojiew21 分钟前
istio in action之流量控制与路由
java·数据库·istio
hykDatabases1 小时前
Oracle内置函数及自定义函数
数据库·oracle
HelloZheQ1 小时前
数据库故障排查指南
数据库·oracle
lixora1 小时前
Cluster Interconnect in Oracle RAC
oracle
敲上瘾1 小时前
MySQL数据库与表结构操作指南
linux·数据库·mysql
虾球xz1 小时前
游戏引擎学习第266天:添加顶部时钟概览视图。
数据库·c++·学习·游戏引擎
老友@2 小时前
MySQL 与 Elasticsearch 数据一致性方案
数据库·mysql·elasticsearch·搜索引擎·同步·数据一致性
chunfeng—2 小时前
Redis相关命令详解与原理(一)
数据库·redis·缓存
老友@2 小时前
MySQL + Elasticsearch:为什么要使用ES,使用场景与架构设计详解
数据库·mysql·elasticsearch·搜索引擎·性能优化·系统架构