zoukankan      html  css  js  c++  java
  • MySQL存储引擎

    MySQL存储引擎

    数据库存储引擎是数据库底层软件组件,数据库管理系统使用数据引擎进行创建、查询、更新和删除数据操作。简而言之,存储引擎就是指表的类型。数据库的存储引擎决定了表在计算机中的存储方式。不同的存储引擎提供不同的存储机制、索引技巧、锁定水平等功能,使用不同的存储引擎还可以获得特定的功能。

    现在许多数据库管理系统都支持多种不同的存储引擎。MySQL 的核心就是存储引擎。

    MySQL 提供了多个不同的存储引擎,包括处理事务安全表的引擎和处理非事务安全表的引擎。在 MySQL 中,不需要在整个服务器中使用同一种存储引擎,针对具体的要求,可以对每一个表使用不同的存储引擎。

    img

    MySQL 5.7 支持的存储引擎有 InnoDB、MyISAM、Memory、Merge、Archive、CSV、BLACKHOLE 等。可以使用SHOW ENGINES;语句查看系统所支持的引擎类型

    Support 列的值表示某种引擎是否能使用,YES表示可以使用,NO表示不能使用,DEFAULT表示该引擎为当前默认的存储引擎。

    存储引擎

    关系数据库表是用于存储和组织信息的数据结构,可以将表理解为由行和列组成的表格,类似于Excel的电子表格的形式。有的表简单,有的表复杂,有的表根本不用来存储任何长期的数据,有的表读取时非常快,但是插入数据时去很差。而我们在实际开发过程中,就可能需要各种各样的表,不同的表,就意味着存储不同类型的数据,数据的处理上也会存在着差异。那么,对于MySQL来说,它提供了很多种类型的存储引擎,我们可以根据对数据处理的需求,选择不同的存储引擎,从而最大限度的利用MySQL强大的功能。这篇博文将总结和分析各个引擎的特点,以及适用场合,并不会纠结于更深层次的东西。我的学习方法是先学会用,懂得怎么用,再去知道到底是如何能用的。下面就对MySQL支持的存储引擎进行简单的介绍。

    存储引擎 描述
    ARCHIVE 用于数据存档的引擎,数据被插入后就不能在修改了(只支持SELECT和INSERT语句),且不支持索引。
    CSV 在存储数据时,会以逗号作为数据项之间的分隔符。
    BLACKHOLE 会丢弃写操作,该操作会返回空内容。
    FEDERATED 将数据存储在远程数据库中,用来访问远程表的存储引擎。
    InnoDB 支持事务、行级锁以及外键等功能。
    MEMORY 置于内存的表,也就是说将数据存放于内存之中,类似于Redis。
    MERGE 用来管理由多个 MyISAM 表构成的表集合。
    MyISAM 主要的非事务处理存储引擎,性能相对于InnoDB来说要高一些。
    NDB MySQL 集群专用存储引擎

    查看存储引擎信息

    通常情况下,我们使用数据库存储数据的时候,都会使用到存储引擎,下面我们来一起看看MySQL数据库支持哪些存储引擎。

    查看当前数据库中支持的存储引擎

    mysql> show engines;
    

    临时设置数据库存储引擎

    mysql> set  default_storage_engine=MyISAM;
    Query OK, 0 rows affected (0.00 sec)
    
    mysql> SELECT @@default_storage_engine;
    +--------------------------+
    | @@default_storage_engine |
    +--------------------------+
    | MyISAM                   |
    +--------------------------+
    1 row in set (0.00 sec)
    

    查看某个表的存储引擎

    mysql> SHOW CREATE TABLE db1.db01G
    *************************** 1. row ***************************
           Table: db01
    Create Table: CREATE TABLE `db01` (
      `name` varchar(20) DEFAULT NULL,
      `id` int(11) NOT NULL AUTO_INCREMENT,
      `sex` varchar(20) DEFAULT NULL,
      `addr` varchar(20) DEFAULT NULL,
      PRIMARY KEY (`id`)
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8
    1 row in set (0.00 sec)
    
    
    mysql> SELECT TABLE_NAME,ENGINE FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME = 'db01' AND TABLE_SCHEMA = 'db1'G
    *************************** 1. row ***************************
    TABLE_NAME: db01
        ENGINE: InnoDB
    1 row in set (0.00 sec)
    
    mysql> SELECT ENGINE FROM information_schema.TABLES WHERE TABLE_NAME="pm20";
    +--------+
    | ENGINE |
    +--------+
    | MyISAM |
    +--------+
    1 row in set (0.00 sec)
    

    查看myisam的表有哪些

    mysql> select table_schema,table_name,engine from information_schema.tables where engine='myisam';
    +--------------+------------------+--------+
    | table_schema | table_name       | engine |
    +--------------+------------------+--------+
    | db1          | Dem_Picture      | MyISAM |
    | db1          | t2               | MyISAM |
    | mysql        | columns_priv     | MyISAM |
    | mysql        | db               | MyISAM |
    | mysql        | event            | MyISAM |
    | mysql        | func             | MyISAM |
    | mysql        | ndb_binlog_index | MyISAM |
    | mysql        | proc             | MyISAM |
    | mysql        | procs_priv       | MyISAM |
    | mysql        | proxies_priv     | MyISAM |
    | mysql        | tables_priv      | MyISAM |
    | mysql        | user             | MyISAM |
    +--------------+------------------+--------+
    12 rows in set (0.07 sec)
    

    查看innodb的表有哪些

    mysql> select table_schema,table_name,engine from information_schema.tables where engine='innodb';
    +--------------------+---------------------------+--------+
    | table_schema       | table_name                | engine |
    +--------------------+---------------------------+--------+
    | information_schema | COLUMNS                   | InnoDB |
    | information_schema | EVENTS                    | InnoDB |
    | information_schema | OPTIMIZER_TRACE           | InnoDB |
    | information_schema | PARAMETERS                | InnoDB |
    | information_schema | PARTITIONS                | InnoDB |
    | information_schema | PLUGINS                   | InnoDB |
    | information_schema | PROCESSLIST               | InnoDB |
    | information_schema | ROUTINES                  | InnoDB |
    | information_schema | TRIGGERS                  | InnoDB |
    | information_schema | VIEWS                     | InnoDB |
    | db1                | db01                      | InnoDB |
    | db1                | t1                        | InnoDB |
    | mysql              | engine_cost               | InnoDB |
    | mysql              | gtid_executed             | InnoDB |
    | mysql              | help_category             | InnoDB |
    | mysql              | help_keyword              | InnoDB |
    | mysql              | help_relation             | InnoDB |
    | mysql              | help_topic                | InnoDB |
    | mysql              | innodb_index_stats        | InnoDB |
    | mysql              | innodb_table_stats        | InnoDB |
    | mysql              | plugin                    | InnoDB |
    | mysql              | server_cost               | InnoDB |
    | mysql              | servers                   | InnoDB |
    | mysql              | slave_master_info         | InnoDB |
    | mysql              | slave_relay_log_info      | InnoDB |
    | mysql              | slave_worker_info         | InnoDB |
    | mysql              | time_zone                 | InnoDB |
    | mysql              | time_zone_leap_second     | InnoDB |
    | mysql              | time_zone_name            | InnoDB |
    | mysql              | time_zone_transition      | InnoDB |
    | mysql              | time_zone_transition_type | InnoDB |
    | sys                | sys_config                | InnoDB |
    | test               | student                   | InnoDB |
    | test               | t1                        | InnoDB |
    +--------------------+---------------------------+--------+
    34 rows in set (0.01 sec)
    

    修改存储引擎

    在使用数据库的时候,我们经常会去使用不同的存储引擎来存储数据,那就难免需要修改存储引擎。下面我们介绍几个存储引擎的修改方法。

    修改配置文件(永久)

    vim /etc/my.cnf
    [mysqld]
    default-storage-engine=innodb
    innodb_file_per_table=1				# InnoDB独立表空间
    

    临时修改存储引擎(临时)

    mysql> set  default_storage_engine=MyISAM;
    Query OK, 0 rows affected (0.00 sec)
    
    mysql> SELECT @@default_storage_engine;
    +--------------------------+
    | @@default_storage_engine |
    +--------------------------+
    | MyISAM                   |
    +--------------------------+
    1 row in set (0.00 sec)
    

    创建表的时候修改存储引擎

    mysql> CREATE TABLE shanhe(id INT) ENGINE=innodb;
    
    

    存储引擎的实验

    下面我们用几个实验来测试几个存储引擎的区别。

    
    mysql> use db1;
    Reading table information for completion of table and column names
    You can turn off this feature to get a quicker startup with -A
    
    Database changed
    mysql> create table t1(id int)engine=innodb;
    Query OK, 0 rows affected (0.03 sec)
    
    mysql> create table t2(id int)engine=myisam;
    Query OK, 0 rows affected (0.00 sec)
    
    mysql> create table t3(id int)engine=memory;
    Query OK, 0 rows affected (0.00 sec)
    
    mysql> create table t4(id int)engine=blackhole;
    Query OK, 0 rows affected (0.00 sec)
    
    mysql> show tables;
    +---------------+
    | Tables_in_db1 |
    +---------------+
    | t1            |
    | t2            |
    | t3            |
    | t4            |
    +---------------+
    6 rows in set (0.00 sec)
    
    mysql> exit
    Bye
    
    root@756ad135dd2e:/var/lib/mysql/db1# ls
    t1.frm  t1.ibd  t2.MYD  t2.MYI  t2.frm  t3.frm  t4.frm
    
    # 发现后两种存储引擎只有表结构,无数据。
    # memory,在重启mysql或者重启机器后,表内数据清空。
    # blackhole,往表内插入任何数据,都相当于丢入黑洞,表内永远不存记录。
    # innodb支持事务,而myisam存储引擎是不支持事务。
    
    
  • 相关阅读:
    iOS工作笔记(十二)
    隐藏底部导航栏tabbar
    SDWebImage的使用及图片不改变问题的解决
    NSString转化为NSDictionary
    makeObjectsPerformSelector用法
    iOS中点与像素
    iOS动画的简单介绍
    Pods安装时卡在Updating local specs repositories界面时的处理
    使用uicollectionView时需要注意的问题
    Sublime Text 3 自定义配置快捷键
  • 原文地址:https://www.cnblogs.com/backz/p/15405336.html
Copyright © 2011-2022 走看看