3.21 MySQL数据库总结

实战题参考材料:
 
    1. MYSQL的安装

      1. 在window下启动,更换密码
        1. >cd /d D:\1.Software\1.Development Software\Mysql\mysql-8.0.22-winx64\bin
        2. mysqld --initialize --console
        3. mysqld install
        4. net start mysql
        5. mysql -u root -p
        6. ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '123456';
      2. 日常启动
        1. net start mysql
        2. mysql -u root -p
        3. ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '123456';
    2. Native的安装

      1. 连接MYSQL
      2. 实际操作
    3. Mysql的知识

      1. 三大范式跟oracle相同
      2. 数据隔离级别跟Oracle相同
      3. B树和B+树的不同
        1. 区别有以下两点:
          1. B+树中只有叶子节点会带有指向记录的指针(ROWID),而B树则所有节点都带有,在内部节点出现的索引项不会再出现在叶子节点中。
          2. B+树中所有叶子节点都是通过指针连接在一起,而B树不会。
        2. B+树的优点:
          1. 非叶子节点不会带上ROWID,这样,一个块中可以容纳更多的索引项,一是可以降低树的高度。二是一个内部节点可以定位更多的叶子节点。
          2. 叶子节点之间通过指针来连接,范围扫描将十分简单,而对于B树来说,则需要在叶子节点和内部节点不停的往返移动。
        3. B树的优点:
          1. 对于在内部节点的数据,可直接得到,不必根据叶子节点来定位。
      4. 聚簇索引和覆盖索引
        1. 在B+树的索引中,叶子节点可能存储了当前的key值,也可能存储了当前的key值以及整行的数据,这就是聚簇索引和非聚簇索引。 在InnoDB中,只有主键索引是聚簇索引,如果没有主键,则挑选一个唯一键建立聚簇索引。如果没有唯一键,则隐式的生成一个键来建立聚簇索引。
          1. 聚簇索引:将数据存储与索引放到了一块,找到索引也就找到了数据
          2. 非聚簇索引:将数据存储于索引分开结构,索引结构的叶子节点指向了数据的对应行
        2. 澄清一个概念:innodb中,在聚簇索引之上创建的索引称之为辅助索引,辅助索引访问数据总是需要二次查找,非聚簇索引都是辅助索引,像复合索引、前缀索引、唯一索引,辅助索引叶子节点存储的不再是行的物理位置,而是主键值
      5. 索引类型,参考索引系列博客
        1. 主键索引: 数据列不允许重复,不允许为NULL,一个表只能有一个主键。
        2. 唯一索引: 数据列不允许重复,允许为NULL值,一个表允许多个列创建唯一索引。
          1. 可以通过 ALTER TABLE table_name ADD UNIQUE (column); 创建唯一索引
          2. 可以通过 ALTER TABLE table_name ADD UNIQUE (column1,column2); 创建唯一组合索引
        3. 普通索引: 基本的索引类型,没有唯一性的限制,允许为NULL值。
          1. 可以通过ALTER TABLE table_name ADD INDEX index_name (column);创建普通索引
          2. 可以通过ALTER TABLE table_name ADD INDEX index_name(column1, column2, column3);创建组合索引
        4. 全文索引: 是目前搜索引擎使用的一种关键技术。
        5. 可以通过ALTER TABLE table_name ADD FULLTEXT (column);创建全文索引
    4. InnoDB存储引擎和MyISAM存储引擎

      1. 两者区别
        1. Innodb引擎:Innodb引擎提供了对数据库ACID事务的支持。并且还提供了行级锁和外键的约束。它的设计的目标就是处理大数据容量的数据库系统。
        2. MyIASM引擎(原本Mysql的默认引擎):不提供事务的支持,也不支持行级锁和外键。
        3. MEMORY引擎:所有的数据都在内存中,数据的处理速度快,但是安全性不高。
      2. 锁:在关系型数据库中,可以按照锁的粒度把数据库锁分为行级锁(INNODB引擎)、表级锁(MYISAM引擎)和页级锁(BDB引擎 )。
        1. 行级锁 行级锁是Mysql中锁定粒度最细的一种锁,表示只针对当前操作的行进行加锁。行级锁能大大减少数据库操作的冲突。其加锁粒度最小,但加锁的开销也最大。行级锁分为共享锁 和 排他锁。
          1. 特点:开销大,加锁慢;会出现死锁;锁定粒度最小,发生锁冲突的概率最低,并发度也最高。
          2. 答:InnoDB是基于索引来完成行锁
          3. for update 可以根据条件来完成行锁锁定,并且 id 是有索引键的列,如果 id 不是索引键那么InnoDB将完成表锁,并发将无从谈起
        2. 表级锁 表级锁是MySQL中锁定粒度最大的一种锁,表示对当前操作的整张表加锁,它实现简单,资源消耗较少,被大部分MySQL引擎支持。最常使用的MYISAM与INNODB都支持表级锁定。表级锁定分为表共享读锁(共享锁)与表独占写锁(排他锁)。
          1. 特点:开销小,加锁快;不会出现死锁;锁定粒度大,发出锁冲突的概率最高,并发度最低。
        3. 页级锁 页级锁是MySQL中锁定粒度介于行级锁和表级锁中间的一种锁。表级锁速度快,但冲突多,行级冲突少,但速度慢。所以取了折衷的页级,一次锁定相邻的一组记录。
          1. 特点:开销和加锁时间界于表锁和行锁之间;会出现死锁;锁定粒度界于表锁和行锁之间,并发度一般
        4. 总结:锁的粒度取决于具体的存储引擎,InnoDB实现了行级锁,页级锁,表级锁。
      3. 从锁的类别上分MySQL都有哪些锁呢?
        1. 共享锁: 又叫做读锁。 当用户要进行数据的读取时,对数据加上共享锁。共享锁可以同时加上多个。
        2. 排他锁: 又叫做写锁。 当用户要进行数据的写入时,对数据加上排他锁。排他锁只可以加一个,他和其他的排他锁,共享锁都相斥
      4. 功能划分可以分为悲观锁和乐观锁,跟Oracle一样
      5. 死锁是什么
        1. 死锁是指两个或多个事务在同一资源上相互占用,并请求锁定对方的资源,从而导致恶性循环的现象。
        2. 解决方式:
          1. 如果不同程序会并发存取多个表,尽量约定以相同的顺序访问表,可以大大降低死锁机会。
          2. 在同一个事务中,尽可能做到一次锁定所需要的所有资源,减少死锁产生概率;
          3. 对于非常容易产生死锁的业务部分,可以尝试使用升级锁定颗粒度,通过表级锁定来减少死锁产生的概率;
          4. 如果业务处理不好可以用分布式事务锁或者使用乐观锁
posted @ 2020-11-25 11:12  Smileing  阅读(82)  评论(0编辑  收藏  举报