自学内容网 自学内容网

Mysql数据库索引、事务相关知识

索引

  • 索引是一种特殊的文件,包含着对数据表里所有记录的引用指针。可以对表中的一列或多列创建索引,

    并指定索引的类型,各类索引有各自的数据结构实现

  • 查看索引

show index from 表名;

在这里插入图片描述

  • 创建索引
  • 对于非主键、非唯一约束、非外键的字段,可以创建普通索引
create index 索引名 on 表名(字段名);
  • 删除索引

drop index 索引名 on 表名;

drop index 索引名 on 表名;

删除索引,表创建过后创建索引的危险操作的解决办法

  • 原因:
    1. 数据库锁删除一个索引时,数据库通常会获取一个排他锁来执行删除操作,意味着在删除索引期间,其他对该表的操作可能会被阻塞,直到删除操作完成。
    2. 数据可用性:在删除和重新创建索引的过程中,可能会有一段时间内无法访问该表
    3. 存储空间:索引需要额外的存储空间。对于大型表或者包含大量索引的表,这可能会占用大量磁盘空间
  • 解决方法:
    1. 用新机器搭建一个数据库
    2. 把生产环境的数据库表创建好,加上索引
    3. 把生产环境的数据库的数据导入新的数据库中
    4. 用新的数据库这个机器代替原来的

事务

  • 事务指逻辑上的一组操作,组成这组操作的各个单元,要么全部成功,要么全部失败

  • 事务是确保数据操作的一致性和完整性的重要机制

  • 底层数据结构:B+树

  • 数据库事务机制

    1. undo log + redo log
    2. 通过日志,println写到文件理,记录之前的数据进行操作
    3. 虽然数据库挂了,但是日志已经记录下来了
    4. 数据库重启过后,读取之前的日志,对一半的事务进行回滚
  • 事务特性

    1. 原子性:事务被视为不可分割的最小工作单元,通过事务,把多个操作打包到一起
    2. 一致性:事务的执行不会破坏数据库的完整性约束,同时通过约束避免非法的情况。不会让数据库出现问题的时候出现一些错误的情况,
    3. 持久性:事务的任何修改都是持久存在的
    4. 隔离性:避免事务并发执行的时候可能出现的问题
  • 典型事务bug

  • 脏读问题

    1. 事务1修改了某个数据,但是事务还没有提交
    2. 事务2读取了同一个数据,此时事务2读到的数据可能就是一个脏的数据,因为事务1可能之后还要修改这个数据
    3. 两个事务同时进行

    解决:给写操作加锁,直到事务1修改完成过后事务2才能进行访问

  • 不可重复读

    1. 事务1先修改数据,然后加锁,事务2读数据的时候需要等待
    2. 事务1修改提交过后,事务2进行读数据
    3. 此时又来一个事务3,因为读的时候并没有进行加锁,事务3对事务2读的数据进行了修改,导致两次读取到的数据结果不一样
  • 解决:读进行加锁,读数据的时候不能进行修改

  • 幻读

    1. 事务1修改数据,事务2开始读数据
    2. 事务3新增了一个其他的数据,此时事务2就可能出现两次读取到的结果集不同
  • 解决:串行化,不在进行并发操作,每个事务都是串行执行的(执行第一个在执行第二个。。。)

  • Mysql隔离级别

    1. read uncommitted:读未提交,并行程度最高,隔离程度最低,效率最高,数据最不靠谱
    2. read commited :读已提交,给写操作加锁,并行程度降低,隔离程度
    3. repeatable read:可重复读,给读写操作都加锁
    4. serializable :串行化,所有的事务都是串行执行
  • 事务使用

    1. 开启事务:start transaction;
    2. 执行多条SQL语句
    3. 回滚或提交:rollback/commit;(rollback即是全部失败,commit即是全部成功)
start transaction;
-- 阿里巴巴账户减少2000
update accout set money=money-2000 where name = '阿里巴巴';
-- 四十大盗账户增加2000
update accout set money=money+2000 where name = '四十大盗';
commit;

原文地址:https://blog.csdn.net/qq_66333706/article/details/140227250

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!