事务、视图、索引

事务、视图、索引

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不仅要保存数据,还要保存一下索引文件。
    数据重复且分布平均的表字段,因此应该只为最经常查询和最经常排序的数据建立索引。)
  • 注意,如果某个数据列包含许多重复的内容,为它建立索引就没有太大的实际效果。
相关推荐
好奇的菜鸟1 小时前
Spring Boot 事务失效问题:同一个 Service 类中方法调用导致事务失效的原因及解决方案
数据库·spring boot·sql
岁岁岁平安2 小时前
Redis基础学习(五大值数据类型的常用操作命令)
数据库·redis·学习·redis list·redis hash·redis set·redis string
小光学长4 小时前
基于vue框架的防疫科普网站0838x(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。
数据库
极限实验室4 小时前
使用 Docker Compose 简化 INFINI Console 与 Easysearch 环境搭建
数据库·docker·devops
飞翔的佩奇4 小时前
Java项目:基于SSM框架实现的旅游协会管理系统【ssm+B/S架构+源码+数据库+毕业论文】
java·数据库·mysql·毕业设计·ssm·旅游·jsp
智海观潮5 小时前
Flink CDC支持Oracle RAC架构CDB+PDB模式的实时数据同步吗,可以上生产环境吗
大数据·oracle·flink·flink cdc·数据同步
float_六七6 小时前
SQL六大核心类别全解析
数据库·sql·oracle
Code季风8 小时前
将 gRPC 服务注册到 Consul:从配置到服务发现的完整实践(上)
数据库·微服务·go·json·服务发现·consul
Boilermaker19928 小时前
【Java EE】SpringIoC
前端·数据库·spring
霸王龙的小胳膊9 小时前
泛微虚拟视图-数据虚拟化集成
数据库