zoukankan      html  css  js  c++  java
  • 第五章 存储引擎

    存储引擎 

    一 存储引擎的介绍

      存储引擎: 可以理解为 mysql的 文件系统,只是功能更加强大,
      mysql引擎功能: 除了可以提供基本的存取功能,还有更多功能 事务功能 锁定 备份和恢复 优化以及特殊功能

    二 MySQL中的存储引擎分类

    1.分类

        InnoDB
        MyISAM
        MEMORY
        ARCHIVE    
        FEDERATED
        EXAMPLE
        BLACKHOLE
        MERGE
        NDBCLUSTER
        CSV

     2. 存储引擎查询

    -- 查看数据库支持的存储引擎
    show engines;
    -- 查看表的存储引擎
    show create table city;
    show table status like 'city'G
    -- 查看index_test  库下的所有表的引擎
    select table_schema,table_name,engine from information_schema.tables where table_schema='index_test';
    -- 查看数据库下存储引擎是innodb的 所有表
    select table_schema,table_name,engine from information_schema.tables where engine='InnoDB';

    三 MySQL存储引擎设置

     1. 在启动配置文件中设置服务器存储引擎:

    [mysqld]
    default-storage-engine=InnoDB

     2. 使用 SET 命令为当前客户机会话设置:

    SET @@storage_engine=InnoDB;

     3. 在 CREATE TABLE 语句指定:

    CREATE TABLE t (i INT) ENGINE =InnoDB;

    四 MySQL Innodb引擎存储结构

     1. MyISAM

    Myisam存储引擎是在mysql5.5之前版本默认的存储引擎
    create table yyy(id int(10))engine=myisam;

    .frm: 记录表结构
    .MYD: 数据存储
    .MYI: 索引存储

     2. InnoDB

    .frm文件:保存了每个表的元数据,包括表结构的定义等,该文件与数据库引擎无关。
    .ibd文件:保存每个表的数据文件

    五 innodb的表空间

    共享表空间:主要存放系统元数据等
    独立表空间:主要存放用户数据

    1. 共享表空间

     1)查看共享表空间

    mysql> show variables like "innodb_data_file_path";
    +-----------------------+------------------------+
    | Variable_name         | Value                  |
    +-----------------------+------------------------+
    | innodb_data_file_path | ibdata1:12M:autoextend |
    +-----------------------+------------------------+

    2) 停服务器,查看ibdata1大小

    [root@db2 data]# du -sh ../data/ibdata1
    76M    ../data/ibdata1

    3) 修改my.cnf

    [mysqld]
    innodb_data_file_path=ibdata1:76M;ibdata2:50M:autoextend

    ibdata1这个必须要和 du-sh 查到的大小一致

    一般都是刚装好数据库就设置这项
    innodb_data_file_path=ibdata1:50M;ibdata2:50M:autoextend
    创建一个表空间,其中包含一个名为 ibdata1 且大小为 50 MB(固定)的数据文件和一个名为 ibdata2 且大小为 50 MB(自动扩展)的数据文件:

    2.独立表空间

    独立表空间 默认是开启
    在 my.cnf 设置 0关闭 1开启

    表空间是  每个 InnoDB 表的 .ibd 文件

    --  否开启
    show variables like "innodb_file_per_table";

    六 MySQL中的事务

    一组数据操作执行步骤,这些步骤被视为一个工作单元
    用于对多个语句进行分组
    可以在多个客户机并发访问同一个表中的数据时使用
    所有步骤都成功或都失败
    如果所有步骤正常,则执行
    如果步骤出现错误或不完整,则取消

    1. 事务ACID 4个隔离级别

    Atomic(原子性)[əˈtɒmɪk]
      所有语句作为一个单元全部成功执行或全部取消。
    Consistent(一致性) [kənˈsɪstənt]
      如果数据库在事务开始时处于一致状态,则在执行该事务期间将保留一致状态。
    Isolated(隔离性) [ˈaɪsəleɪtɪd]
      事务之间不相互影响。
    Durable(持久性)[ˈdjʊərəbl]
      事务成功完成后,所做的所有更改都会准确地记录在数据库中。所做的更改不会丢失。

    2. 事务控制语句

    开始事务
    begin
    ...
    commit
    
    取消事务
    begin
    ...
    rollback

    3. mysql 5.5 默认是自动commit

    在mysql5.5开始, 开启事务时不需要begin 语句。 并且 默认是开启autocommit模式,作为一个事务隐式提交每个语句

    mysql> show variables like "autocommit";
    +---------------+-------+
    | Variable_name | Value |
    +---------------+-------+
    | autocommit    | ON    |
    +---------------+-------+
    1 row in set (0.00 sec)

    4. 关闭autocommit

    1) 临时设置

    我们可以通过以下命令进行修改关闭(0是关闭,1是开启):
    SET GLOBAL AUTOCOMMIT=0;  -所有新建会话    
    SET SESSION AUTOCOMMIT=0; -当前会话
    SELECT @@AUTOCOMMIT;      -查看设置结果

    2) 永久设置

    [mysqld]
    AUTOCOMMIT=0

    5. 其他触发隐式commit的情况

    用于隐式提交的 SQL 语句:
      START TRANSACTION
      SET AUTOCOMMIT = 1
    导致提交的非事务语句:
      DDL语句: (ALTER、CREATE 和 DROP)
      DCL语句: (GRANT、REVOKE 和 SET PASSWORD)
      锁定语句:(LOCK TABLES 和 UNLOCK TABLES)
    导致隐式提交的语句示例:
      TRUNCATE TABLE
      LOAD DATA INFILE
      SELECT FOR UPDATE

    6. redo 日志

      重做日志,是事务日志的一种

    作用:
      在事务acid过程中,实现的是D 持久化的操作

    7. undo日志

      回滚日志 是事务日志的一种
    作用:
      在事务acid过程中,实现的是 a c 原子性和一致性的作用

      

    七  MySQL中的锁

    在事务ACID过程中, “锁”和“隔离级别” 一起来实现隔离性作用

    1.锁的粒度   

      1、MyIasm:低并发锁——表级锁
      2、Innodb:高并发锁——行级锁

    2. 四种隔离级别

    READ UNCOMMITTED        
        允许事务查看其他事务所进行的未提交更改
    READ COMMITTED
        允许事务查看其他事务所进行的已提交更改
    REPEATABLE READ******
        确保每个事务的 SELECT 输出一致
        InnoDB 的默认级别
    SERIALIZABLE
        将一个事务的结果与其他事务完全隔离

    3. 查看默认隔离级别

    -- 查看当前会话隔离级别
    select @@tx_isolation;
    
    -- 查看系统当前隔离级别    
    select @@global.tx_isolation;

    默认隔离级别是  REPEATABLE READ


  • 相关阅读:
    Netty快速入门(09)channel组件介绍
    Netty快速入门(08)ByteBuf组件介绍
    Netty快速入门(07)Netty入门例子
    Netty快速入门(06)Netty介绍
    Netty快速入门(05)Java NIO 介绍-Selector
    Netty快速入门(04)Java NIO 介绍-Channel
    Netty快速入门(03)Java NIO 介绍-Buffer
    Netty快速入门(02)Java I/O(BIO)介绍
    Netty快速入门(01)Linux I/O模型介绍
    老虎集团【4面】
  • 原文地址:https://www.cnblogs.com/augustyang/p/11511729.html
Copyright © 2011-2022 走看看