0
点赞
收藏
分享

微信扫一扫

mysql面试复习记录

Java架构领域 2022-03-15 阅读 116

SQL中的select语句完整的执行顺序:

        (1)from 子句组装来自不同数据源的数据;

        (2)where 子句基于指定的条件对记录行进行筛选;

        (3)group by 子句将数据划分为多个分组;

        (4)使用聚集函数进行计算;

        (5)使用 having 子句筛选分组;

        (6)计算所有的表达式;

        (7)select 的字段;

        (8)使用order by 对结果集进行排序

Mysql中的事务的特性:

特性:

  1. 原子性(Atomicity):事务开始后所有操作,要么全部做完,要么全部不做,不可能停滞在中间环节。事务执行过程中出错,会回滚到事务开始前的状态,所有的操作就像没有发生一样。也就是说事务是一个不可分割的整体,就像化学中学过的原子,是物质构成的基本单位
  2. 一致性(Consistency):事务开始前和结束后,数据库的完整性约束没有被破坏 。比如A向B转账,不可能A扣了钱,B却没收到。
  3. 隔离性(Isolation):同一时间,只允许一个事务请求同一数据,不同的事务之间彼此没有任何干扰。比如A正在从一张银行卡中取钱,在A取钱的过程结束前,B不能向这张卡转账。
  4. 持久性(Durability):事务完成后,事务对数据库的所有更新将被保存到数据库,不能回滚。

事务的分类:

    1、扁平事务<使用最频繁的事务,要么都成功提交,要么都失败回滚>
    2、带有扁平点的扁平事务<允许事务回滚到同一个事务中比较早的一个状态>
    3、链事务<回滚到最近的一个保存点,在所有的事务都提交之后才会释放锁,并且下一个事务的开始需要上一个事务来进行通知>
    4、嵌套事务<树结构,只有当父级事务提交之后子级事务才会提交,任意一个父级事务的回滚都会导致下面的子级事务回滚>
    5、分布式事务<操作两个不同的数据库,使其实现数据的同步,例如将中国银行的钱转到工商银行,这个不同银行的不同数据库,为分布式事务>

3、隔离级别


    1、read uncommittted<脏读:事务A读取了事务B更新的数据,然后B回滚操作,那么A读取到的数据是脏数据>
    2、read committed<不可重复读:事务 A 多次读取同一数据,事务 B 在事务A多次读取的过程中,对数据作了更新并提交,导致事务A多次读取同一数据时,结果 不一致。>
    3、repeatable read<幻读:系统管理员A将数据库中所有学生的成绩从具体分数改为ABCDE等级,但是系统管理员B就在这个时候插入了一条具体分数的记录,当系统管理员A改结束后发现还有一条记录没有改过来,就好像发生了幻觉一样,这就叫幻读。>
    4、serializable<锁表,不会出现意外情况>

不可重复读和幻读容易混淆,不可重复读侧重于修改,幻读侧重于增加或者删除。解决幻读的需要锁住表,解决不可重复读只需要锁住满足的条件即可。

行锁和表锁

MyISAM

InnoDB

行表锁

表锁,即使操作一条记录也会锁住整个表,不适合高并发的操作

行锁,操作时只锁某一行,不对其它行有影响,适合高并发的操作

Mysql中的锁


    1,、lock
        1、共享锁<s lock>允许事务读取一行数据

                共享锁允许多个事务来读取相同的数据,因为读取不会改变数据,但是不能与排他锁共存,当有事务想要update数据的时候就要等共享锁释放之后才能使用排他锁进行update


        2、排他锁<x lock>允许事务更新或者是删除一条数据

                当排他锁进行了行数据的锁定的时候就必须等这个锁释放之后下一个锁才能进来,也就是说必须当数据更新完成之后才能接收下一个事务的锁


        3、意向共享锁<is lock>事务想要获得一张表某几行的共享锁
        4、意向排他锁<ix lock>事务想要获得一张表的某几行的排他锁
    2、latch<轻量级锁,锁的时间非常短,用来操作临界资源>
    3、一致性的非锁定读
    4、一致性锁定读
    5、死锁

举报

相关推荐

0 条评论