zoukankan      html  css  js  c++  java
  • 3.21 MySQL数据库总结

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

        1. 在window下启动,更换密码
          1. >cd /d D:1.Software1.Development SoftwareMysqlmysql-8.0.22-winx64in
          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. 如果业务处理不好可以用分布式事务锁或者使用乐观锁
  • 相关阅读:
    MySQL CREATE EVENT创建任务计划 定时执行任务
    MYSQL 的一些基本操作
    PHP mktime() 函数
    php格式化数字:位数不足前面加0补足
    浅析大数据量高并发的数据库优化
    使用SquirrelMQ打造一个千万级数据更新量的应用
    MySQL行锁深入研究
    MySQL 学习笔记 一
    利用C#操作配置文件(转)
    每个分类取最新的几条的SQL实现(转载记录)
  • 原文地址:https://www.cnblogs.com/Smileing/p/14034859.html
Copyright © 2011-2022 走看看