当前位置: 首页 > news >正文

数据库的事务和索引

事务简介

事务 是一组操作的集合,它是一个不可分割的工作单位,事务会把所有的操作作为一个整体一起向系统提交或撤销操作 请求,即这些操作要么同时成功,要么同时失败

例如银行转账,如果付款方付款成功但收款方没收到钱,如果没有开启事务就会发生重大错误

事务的两种开启方式

设置为手动

select @@autocommit; 查看事务,1为主动 0为手动

set @@autocommit = 0 设置事务为手动

commit 提交事务

rollback 回滚事务

开启事务

start transaction 开启事务,标记事务的起始位置

commit 提交事务

rollback 回滚事务

set autocommit = 1; 开启MySQL数据库的自动提交

注意:在这种模式下,事务为默认的自动提交,在start transaction 后才开启事务

事务处理步骤

四大特性

  • 原子性(Atomicity) :事务是不可分割的最小操作单元,要么全部成功,要么全部失败。

  • 一致性(Consistency):事务完成时,必须使所有的数据都保持一致状态。

  • 隔离性(Isolation) :数据库系统提供的隔离机制,保证事务在不受外部并发操作影响的独立环境下运行。

  • 持久性(Durability) :事务一旦提交或回滚,它对数据库中的数据的改变就是永久的。

并发事务

索引

作用:

  • 提高查询速度

  • 确保数据的唯一性

  • 可以加速表和表之间的连接,实现表与表之间的参照完整性

  • 使用分组和排序子句进行数据检索时,可以显著减少分组和排序的时间

  • 全文检索字段进行搜索优化

分类:

  • 主键索引(PRIMARY KEY)

  • 唯一索引(UNIQUE)

  • 常规索引(INDEX)

  • 全文索引(FULLTEXT)

主键索引

  • 某一个属性或属性的组合能唯一标识一条记录

    • 如:学生表(学号,姓名,班级,性别等) ,学号就是唯一标识的,可作为主键

  • 特点

    • 最常见的索引类型

    • 确保数据记录的唯一性

    • 确定特定数据记录在数据库中的位置

CREATE TABLE  `Grade` (`GradeID`  INT(11)   AUTO_INCREMENT    PRIMARY KEY,#省略代码……#主键索引也可在字段字义之后,如#  PRIMARY KEY(`GradeID`)    
)

其他索引

#添加主键索引
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)#全文索引搜索中文
alter table 表 add fulltext case_name(`字段`) with parser ngram;  #添加中文分词器
#全文索引的执行
select *
from 表
where match(字段)
against('*内容*' in boolean mode);explain  select .....可以看到执行效率

哪些情况需要创建索引?

  • 主键自动建立唯一索引

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

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

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

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

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

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

  • 查询中统计或者分组字段

哪些情况不要创建索引?

  • 表记录太少

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

  • 注意,如果某个数据列包含许多重复的内容,为它建立索引就没有太大的实际效果。

索引失效的情况

1. WHERE 子句使用了函数

2. 使用 !=<>(不等于)

3. 使用 OR 连接多个条件,且只有部分字段有索引

4. LIKE 查询时,前置 % 导致索引失效

5. 隐式类型转换(索引字段与查询数据类型不匹配)

http://www.dtcms.com/a/499120.html

相关文章:

  • W5500 esp32 micropython 驱动测试 网线直连电脑静态IP设置
  • 1panel docker开启swap内存
  • 动态规划的“降维”艺术:二维矩阵中的建筑奇迹——最大矩形
  • switch语句在汇编层面的几种优化方式 ,为什么能进行优化
  • Apache Spark算法开发指导-特征转换VectorIndexer
  • 企业网站的高跳出率应该如何解决广州物流网站开发
  • Docker 与 K8s 网络模型全解析
  • 【算法与数据结构】拓扑排序实战(栈+邻接表+环判断,附可运行代码)
  • AWS Elastic Load Balancing(ELB)—— 多站点负载均衡的正确打开方式
  • 如何用域名建网站主流建站公司
  • 企业网站模板源代码jz做网站
  • 深入 Spring 内核:解密 15 种设计模式的实战应用与底层实现
  • 【S32K3XX系列MCAL配置-第一节开发环境搭建】
  • 中矿资源的财报估值分析
  • 网站关键词优化方案分为几个步骤嘉兴微信网站建设
  • stm32驱动LTC2494详解
  • AI写作赋能SEO:用提示词打造从标题到发布的全流程优化策略
  • PVT(Pyramid Vision Transformer):金字塔结构,适合检测/分割
  • SSRF 漏洞深度剖析:从原理到实战
  • Python第十八节 命名空间作用域详细介绍及注意事项
  • 网站怎么做跳转链接域名备案要多少钱
  • 哪个网站查公司信息比较准网站设计像素
  • mq和rocketmq
  • AI搜索自由:Perplexica+cpolar构建你的私人知识引擎
  • C++基础:(十五)queue的深度解析和模拟实现
  • VSR 项目解析
  • 软件工程新纪元:AI协同编程架构师的修养与使命
  • 一、RPA基础认知与环境搭建
  • 网站域名过期了怎么办怎样做网站导航界面
  • armbian 滚动更新锁定