• Mysql语法四:索引查找和了解何为事务


    目录

    1.索引

    1.1:使用

    1.1.1:查看索引

     1.2.2:创建索引

    1.1.3:删除索引

    1.2:索引查询的原理

    1.2.1:何为 B+树

    2.事务

    2.1:特性

    2.1.1:原子性

    2.1.2:一致性

    2.1.3:持久性

    2.1.4:隔离性

    2.2:事务之间相互影响的种类

    2.2.1:脏读

    2.2.2:不可重复读

    2.2.3:幻读


    前言:我们前一篇讲了怎样多表之间联合查询,这样的查找效率不高,所以我们这篇将要将一个快的查找,索引---相当于我们书的目录

    1.索引

    1.1:使用

    在创建主键约束(Primary key),唯一约束(Unique),外键约束(Foreign key)时,会自动创建对应列的索引。

    1.1.1:查看索引

    show index from 表名;

    1a89877f8a454dbb8f5cafc0342b04f6.png

     1.2.2:创建索引

    create index 索引名(你取得别名) on 表名(列名--你想变成索引的列);

    e39c06def95145639316a6b7ad76ad64.png

    最好是在表创建之初就把索引给搞好。

    如果在已经有很多条数据的表来创建索引,会吃掉大量的磁盘,系统,在这段时间类,数据库是无法正常的进行工作的。

    1.1.3:删除索引

    drop index 索引名 on 表名;

    88d97239a4ae4c15814224b01cfea7cc.png


    1.2:索引查询的原理

    索引保存的数据结构主要为B+树。

    1.2.1:何为 B+树

    2645bb04115b4cbdbbc999b35f53a551.png

    1.B+树又叫N叉搜素树,每一个节点上包含N个key值,N个key划分N个区间,最后一个Key就是最大值。

    2.父节点的元素会重复出现在子节点上,这样是叶子节点包含了所有数据。

    3.叶子节点,用类似链表的方式,首尾相连。

    带有主键的表,就是按照主键索引的B+树来组织的。

    优点:

    1.高度降低下来,比较的时候,硬盘IO次数就比较少。

    2.适合范围查询

    3.所有的查询,都是落在叶子节点上的,无论查询哪个元素,中间比较的次数差不多,查询操作比较均衡。

    假如:索引是主键列id号。

    baecd4c72e484171848b62772484a254.png

     叶子节点:存放了索引信息和data域。

    非叶子节点:只存放了索引信息。

    如果索引不是主键列

    会构造另外一棵B+树,非叶子节点存放的是索引,而叶子节点存放的不是完整的数据行,而是主键。

    使用主键列来查询,只要查一次B+ 树就可以了

    而使用非主键列的索引来查询,则需要先查询一遍索引的B+树,再查一遍主键列的索引的B+树。(这个叫回表)。


    2.事务

    数据库事务是访问并可能操作各种数据项的一个数据库操作的序列。事务处理可以用来维护数据库的完整性,保证成批的Mysql语句(insert update delete)那么全部成功,那么全部失败。

    2.1:特性

    2.1.1:原子性

    原子性就是把一个事务中的所有操作打包成一个整体,那么全部成功,那么全部失败。如果中间有一个操作失败,就会自动恢复到执行之前的样子,就像这个事务从来没有执行过。也叫做回滚(把执行过的操作逆向恢复回去)。

    例如:

    张三给李四转100块钱,首先会在张三的账户上扣除一百块钱,等李四收取,之后在李四的账户上增加一百块钱。

    这一天,转钱的时候,张三断网了。这就说明这个事务已经失败了,就要进行回滚,从张三的账户上扣除一百块钱进行逆向操作,使张三的账户金额不变。就像没有发生转钱这件事。


    2.1.2:一致性

    事务执行前和事务执行后都是将数据合法的状态,符合预测规则。

    如上个例子:

    一致性就是,张三账户扣除的钱和李四账户增加的钱要一样多。


    2.1.3:持久性

    事务一旦提交,对数据库的改变都是永久的,事务产生的修改都会存入到硬盘中。

    2.1.4:隔离性

    数据库使允许多个事务同时进行操作,隔离性就是防止多个事务并发执行由于交叉而导致数据错误。

    隔离性越高,就意味着事务之间的并发程度越低,执行效率越慢,但是数据的准确率越高。

    2.2:事务之间相互影响的种类

    2.2.1:脏读

    就是两个事务并发执行(如 读,写)读这个事务读入了错误的数据就是脏读。

    例如:

    写这个事务:张三给老师上传作业。

    读这个事务:老师就立马批改这个作业。

    写修改这个事务:张三过了一会儿,感觉自己有道题写错了,再一次上传了自己修改过的作业。

    脏读:但老师已经把张三第一次上传的作业批改完了。

    这是因为读和写这个两个事务是完全并发的。


    2.2.2:不可重复读

    为了解决脏读问题,我给写加锁(我在写的时候,你不能看,等我写完了,你才可以看)

    不可重复度:在一个事务中。连续两次读到的数据结果不一样。

    例如:

    老师下一次布置作业的时候,规定提交的时间(时间之后可以修改作业)。

    写:张三在提交结束前上传了作业。

    读:老师正在批改张三的作业。

    写:这时候,有道题,张三突然有解题思路,又把作业进行修改,再次提交了作业。

    读:老师批改张三作业和之前的不一样了。看不到修改前的那道题是怎样写的。


    2.2.3:幻读

    为了解决不可重复读,给读加锁,(我在读的时候,你不可以修改)

    幻读:在同一个事务中,两次读到的结果集不一样。

    例如:

    老师下一次布置作业,规定在提交作业时间之后不可以再次修改作业。

    写:张三提交了作业。

    读:老师进行批改作业,看现在提交作业人数有27人。

    写:李四问张三有啥作业,却被告之,少写了一道题。又将作业进行撤回。

    读:老师批改到一半,看现在提交作业人数只有26人。

    在同一个事务中,两次读的结果集不一样。


    总结

    以上就是我总结的Mysql的索引和事务,若上面若错误的,请各位铁子留言纠错,若感觉不错,请一键三联。

     

     

     

     

  • 相关阅读:
    Redis网络模型-IO多路复用
    新房装修,自带的线路有必更要换吗
    掌握信息利器,快速发现潜在商机——介绍一款高效的数据检索软件
    DAC的简单应用
    【Python机器学习项目】项目一:心脏病二分类问题
    数据库系统概论——数据库恢复技术
    Python绘图系统14:用tkinter做一个绘图风格控件
    FullCalendarDemo5 控件的实例讲解—拖拽实现值班排班(二)
    Feign源码解析7:nacos loadbalancer不支持静态ip的负载均衡
    自然语言处理:Transformer与GPT
  • 原文地址:https://blog.csdn.net/qq_56701924/article/details/128024230